SpringCloud之集成RabbitMQ

以订单系统和库存系统为例,使用api接口会使得服务之间的耦合增大
在这里插入图片描述
通过整合RabbitMQ实现服务之间的解耦
在这里插入图片描述

一、引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

二、配置文件

spring :
	rabbitmq:
	    host: 192.168.184.128
	    port: 5672
	    username: admin
	    password: admin
	    virtual-host: testhost
	    listener:
	      simple:
	        #开启手动确认消息
	        acknowledge-mode: manual
	        concurrency: 3 #消费者最小数量
	        max-concurrency: 10 # 消费者最大数量
	        retry:
	          #开启消费重试
	          enabled: true
	          #重试三次
	          max-attempts: 3
	          #间隔五秒
	          initial-interval: 5000

三、消息通信

3.1 绑定队列

  1. 生产者
@Component
public class MqSend {
	@Autowired
    private AmqpTemplate amqpTemplate;
    
    public void process(){
        amqpTemplate.convertAndSend("队列名称","内容");
    }
}
  1. 消费者
@Component
public class MqReceiver {
	//使用queuesToDeclare,当队列不存在时自动创建队列
    @RabbitListener(queuesToDeclare =@Queue("队列名称"))
    public void process(String message){
        System.out.println(message);
    }
}

3.2 绑定交换机

注意:rabbitMQ上需要先添加对应的交换机和队列

  1. 生产者
public class MqSend {
	@Autowired
    private AmqpTemplate amqpTemplate;
    
    public void process(){
        amqpTemplate.convertAndSend("交换机名称","队列名称","内容");
    }
}
  1. 消费者
```java
@Component
public class MqReceiver {
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue("队列名称"),
            exchange = @Exchange("交换机名称")
    ))
    public void process(String message){
        System.out.println(message);
    }
}

3.3 绑定routing Key

注意:rabbitMQ上需要先添加对应的交换机和队列

  1. 生产者
public class MqSend {
	@Autowired
    private AmqpTemplate amqpTemplate;
    
    public void process(){
        amqpTemplate.convertAndSend("交换机名称","routing key","内容");
    }
}
  1. 消费者
@Component
public class MqReceiver {
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue("队列名称"),
            exchange = @Exchange("交换机名称"),
            key = "routing key"
    ))
    public void process(String message){
        System.out.println(message);
    }
}

四、流量削峰

在消费者注解加上concurrency属性并且设置对应的最大处理消息数

@RabbitListener(bindings = @QueueBinding(
            value = @Queue("goodsQueue"),
            exchange = @Exchange("goodsExchange"),
            key = "buy"
    ),concurrency = "5")
public void process(String message){
}

注意:设置的处理消息数需要配置文件设置的范围内

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值