springCloud 的简单学习
- 业务介绍: 用户模块,订单模块,库存模块,
- 流程如下:
用户付款,需要给用户增加购物积分,
需要客户订单
需要减少库存
也就是说,用户模块接收到信息反馈后,自身进行相应的操作,需要通知订单和库存两个模块也进行相应的操作。
3.Eureka 微服务注册中心的使用
有了注册中心,也知道各个服务在那台机器哪个端口,就需要一个可以替我们向其他服务发送请求的一个工具,而不是我们自己编写代码发送http请求了。这就是Feign.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | /**** *@Description:订单实体类 */ @Data @NoArgsConstructor public class Order { private String userId; private Integer count; private String descrpition; } ** * @Description :订单服务 * @Author :wb */ @RestController @RequestMapping ( "orderService" ) public class OrderService { @Value ( "${server.port}" ) private String port; @RequestMapping (value = "unifiedOrder" , method = RequestMethod.POST) public Order unifiedOrder( @RequestBody Order order){ order.setDescrpition( "success!this is orderService,my port is " + port); return order; } } /** * @Description:库存服务 * @Author:wb */ @RestController @RequestMapping ( "stockService" ) public class StockService { @Value ( "${server.port}" ) private String port; @RequestMapping (value = "reduceStock" , method = RequestMethod.GET) public String reduceStock( @RequestParam Integer count){ return "this is stockService,my port is " + port + ",count is " + count; } } 创建FeognClient 客户端调用接口 @Component @FeignClient (name = "service-client-stock" ) public interface OrderAndStockFeignClient { @RequestMapping (value = "stockService/reduceStock" , method = RequestMethod.GET) String invokeStock( @RequestParam (value = "count" ) Integer count); } /** * @Description:用户服务 * @Author:wb */ @RestController @RequestMapping ( "userService" ) public class UserService { @Autowired private OrderAndStockFeignClient orderAndStockFeignClient; @RequestMapping (value = "pay" , method = RequestMethod.GET) public String unifiedOrder(Integer count){ String invokeStock = orderAndStockFeignClient.invokeStock(count); return invokeStock; } } |
1 | @FeignClient (name = "service-client-stock" ) name 是哪个服务器,value 是uri , |
负载均衡Ribbon的使用。
下面问题来了,如果库服务器部署5在五台机器中,这时候就要用到轮询的机制了,默认的算法是Round Ribbon轮询算法,就是相同application机器一次轮询,不会出现随机现象。
Ribbon有助于控制HTTP,和TCP 的客户端的行为。自动的帮助服务消费去请求。
在Springcloud中Ribbon和Eureka配合使用,Ribbon可以自动从Eureka Server中获取服务地址列表,并基于负载均衡算法,如图展示了Ribbion和Eureka的使用框架
1. LoadBalanced注解:在主程序中RestTemplate添加注解即可实现负载均衡
1 2 3 4 5 | Bean @LoadBalanced public RestTemplate restTemplate() { RestTemplate restTemplate = new RestTemplate(); return restTemplate; |
控制器
1 | return this .restTemplate.getForObject( "http://生产者yml的applicationname+接口名" , 接受的类型. class ); |
配置config类
1 2 3 4 5 6 7 8 9 | @RibbonClient (value = "指定微服务名" ,configuration = 指定配置文件. class ) config类: @Configuration public class RibbonConfig { @Bean public IRule iRule() { return new RandomRule(); //创建一个随机的规则,用于负载均衡时的随机算法 } } |
或yml
1 2 3 4 | 微服务名: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #默认规则类 WeightedResponseTimeRule |
原文链接:https://blog.csdn.net/zajiayouzai/java/article/details/80612729;https://blog.csdn.net/chengqiuming/article/details/80711168l;https://blog.csdn.net/yinzitun7947/article/details/86485163
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步