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

    

 

原文地址:https://www.cnblogs.com/dousil/p/12692920.html