• springCloud 的简单学习


    1. 业务介绍:  用户模块,订单模块,库存模块,
    2. 流程如下: 

          用户付款,需要给用户增加购物积分,

          需要客户订单

          需要减少库存

       也就是说,用户模块接收到信息反馈后,自身进行相应的操作,需要通知订单和库存两个模块也进行相应的操作。      

        3.Eureka 微服务注册中心的使用

          有了注册中心,也知道各个服务在那台机器哪个端口,就需要一个可以替我们向其他服务发送请求的一个工具,而不是我们自己编写代码发送http请求了。这就是Feign.

    /****
    *@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;
        }
    }
    

      

    @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添加注解即可实现负载均衡

    Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
            RestTemplate restTemplate = new RestTemplate();
            return restTemplate;
    

      控制器

    return this.restTemplate.getForObject("http://生产者yml的applicationname+接口名", 接受的类型.class); 
    

      配置config类

    @RibbonClient(value = "指定微服务名",configuration = 指定配置文件.class)
    config类:
    @Configuration
    public class RibbonConfig {
        @Bean
        public IRule iRule() {
            return new RandomRule();//创建一个随机的规则,用于负载均衡时的随机算法
        }
    }
    

      或yml

    微服务名: 
    	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

        

     

  • 相关阅读:
    HDOJ 2095 find your present (2)
    HDOJ 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你
    九度 1337 寻找最长合法括号序列
    九度 1357 疯狂地Jobdu序列
    HDOJ 1280 前m大的数
    九度 1343 城际公路网
    九度 1347 孤岛连通工程
    HDOJ 2151 Worm
    九度 1342 寻找最长合法括号序列II
    九度 1346 会员积分排序
  • 原文地址:https://www.cnblogs.com/dousil/p/12692920.html
Copyright © 2020-2023  润新知