栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-10-01

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-01

                                        ## 微服务学习

第一天;
认识:
微服务是一种经过良好架构设计的分布式架构方案,微服务架构特征:
单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发
面向服务:微服务对外暴露业务接口。
自治:团队独立、技术独立、数据独立、部署独立
隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题
感受:
这是第一次去学习微服务,之前做的项目练习都是单体架构,所有的功能都集中在一起开发,然后再打包发布,感觉太繁琐了,其实在我看来微服务就是把各个功能分开开发,每一个功能在开发过程中不会相互影响
总结:
微服务需要根据业务模块拆分,做到单一职责,不要重复开发相同业务
微服务可以将业务暴露为接口,供其它微服务使用
不同微服务都应该有自己独立的数据库

下边是案例:

这是一个简单的maven项目,其中里边是三个子模块,数据库部分就不展示了
order-service:
相当于一个订单类,就是从数据库中根据订单号来返回订单信息

Slf4j
@RestController
@RequestMapping("/order")
public class OrderController {

   @Autowired
   private OrderService orderService;

    @GetMapping("/{orderId}")
    public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) {
        // 根据id查询订单并返回
        return orderService.queryOrderById(orderId);
    }
}

页面展示:

user-service:
就是一个用户信息类,有用户名,和地址.

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    
    @GetMapping("/{id}")
    public User queryById(@PathVariable("id") Long id) {
        return userService.queryById(id);
    }
}

页面展示:

问题:
这是分模块开发,要是我们想要在输出订单信息的时候要输出对应的user应该怎么做?
其实要是在单体模式开发的话就是再查一次数据库就行,但这是多个模块微服务开发,按照微服务的原则order的模块里边不应该出现查询user数据库等之类的功能,这时候就用到了服务远程调用:
RestTemplate:
RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接, 我们只需要传入url及返回值类型即可。相较于之前常用的HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。
首先要进行在配置注册:

 @Bean
    public RestTemplate restTemplate(){
        return  new RestTemplate();
    }
    其次要修改order-service中的方法:
 public Order queryOrderById(Long orderId) {

        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        //利用RsetTemplate发起http,进行远程调用
        //地址
        String url="http://127.0.0.1/user/"+order.getUserId();
        User user = restTemplate.getForObject(url, User.class);
        order.setUser(user);
        // 4.返回
        return order;
    }


这样就可以实现服务远程调用了。重要的是符合微服务的要求:
不开发相同业务,在order里边只开发order类型,而不能为了user去访问其他数据库。

学习会持续更新!!!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/284473.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号