zoukankan      html  css  js  c++  java
  • 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

        

     

  • 相关阅读:
    2019牛客暑期多校训练营(第七场)- String
    2019牛客暑期多校训练营(第七场)- Governing sand
    2019 Multi-University Training Contest 6
    2019牛客暑期多校训练营(第六场)- Upgrading Technology
    2019牛客暑期多校训练营(第六场)- Shorten IPv6 Address
    2019牛客暑期多校训练营(第五场)- generator 1
    2019 Multi-University Training Contest 4
    Network POJ
    Candies POJ
    Currency Exchange POJ
  • 原文地址:https://www.cnblogs.com/dousil/p/12692920.html
Copyright © 2011-2022 走看看