SpringCloud应用间通信

应用间通信

HTTP:Spring Cloud
RPC:Dubbo

Spring Cloud中服务间两种restful调用方式:
1,RestTemplate
2,Fegin

RestTemplate的三种使用方式

1.第一种方式(直接使用restTemplate,url写死)

        RestTemplate restTemplate = new RestTemplate();
        String response = restTemplate.getForObject("http://localhost:8080/msg", String.class);

2.第二种方式(利用loadBalancerClient通过应用名获取url,然后使用restTemplate)

    @Autowired
    private LoadBalancerClient loadBalancerClient;

        ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCT");
        String url = String.format("http://%s:%s", serviceInstance.getHost(), serviceInstance.getPort() + "/msg");
        RestTemplate restTemplate = new RestTemplate();
        String response = restTemplate.getForObject(url, String.class);

3.第三种方式(需要将restTemplate作为一个bean,利用LoadBalanced,可在restTemplate里使用应用名字)

@Component
public class RestTemplateConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
    @Autowired
    private RestTemplate restTemplate;
    
    String response = restTemplate.getForObject("http://PRODUCT/msg", String.class);

RestTemplate默认负载均衡策略为轮询,
自定义负载均衡策略配置(修改为随机):

PRODUCT:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

客户端负载均衡器:Ribbon

RestTemplate,Feign,Zuul
服务发现
服务选择规则
服务监听
ServerList(通过ServerList获取所有的可用服务列表),ServerListFilter(根据ServerListFilter过滤掉一部分服务),IRule(通过IRule选择一个实例作为最终目标结果)

Feign的使用

声明式REST客户端(伪RPC)
采用了基于接口的注解
1.引入依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2.在启动类上加注解@EnableFeignClients
3.定义好需要调用的接口

@FeignClient(name = "product")
public interface ProductClient {

    @PostMapping("/product/listForOrder")
    List<ProductInfoOutput> listForOrder(@RequestBody List<String> productIdList);

    @PostMapping("/product/decreaseStock")
    void decreaseStock(@RequestBody List<DecreaseStockInput> decreaseStockInputList);
}

4.调用

@Autowired
    private ProductClient productClient;

       //查询商品信息(调用商品服务)
        List<ProductInfoOutput> productInfoList = productClient.listForOrder(productIdList);

消息队列

消息中间件的选择

RabbitMQ,Kafka,ActiveMQ

RabbitMQ

安装

1.进入RabbitMQ下载页面
2.使用Docker镜像
在这里插入图片描述

docker run -d --hostname my-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3.7.3-management

默认帐号:guest,密码:guest

微服务和容器

从系统环境开始,自底至上打包应用
轻量级,对资源的有效隔离和管理
可复用,版本化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值