Basic Queue 简单队列模型(入门案例升级版-WorkQueue)

父工程pom依赖

在父工程demo_rabbitmq中引入依赖

<!--AMQP依赖,包含RabbitMQ-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

publisher实现

首先配置MQ地址,在publisher服务的application.yml中添加配置:

spring:
rabbitmq:
host: 192.168.31.100 # 主机名
port: 5672 # 端口
virtual-host: / # 虚拟主机
username: root # 用户名
password: 123456 # 密码

然后在publisher服务中编写测试类SpringAmqpTest,并利用RabbitTemplate实现消息发送:

@SpringBootTest
public class PublisherTest {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Test
    public  void send(){
        for (int i = 0; i < 200; i++) {
            rabbitTemplate.convertAndSend("mq.basic","呵呵"+i);
        }

    }
}

consumer实现

首先配置MQ地址,在consumer服务的application.yml中添加配置:

spring:
rabbitmq:
host: 192.168.31.100 # 主机名
port: 5672 # 端口
virtual-host: / # 虚拟主机
username: root # 用户名
password: 123456 # 密码

然后在consumer服务的 com.xja.listener 包中新建一个类SpringRabbitListener,代码如下:

@Component
public class BasicQueueListener {
    @RabbitListener(queues = "mq.basic") //核心注解 监听mq.basic这个队列
    public void receive1(String message) throws InterruptedException {
        Thread.sleep(500);
        System.out.println("接收message1 = " + message);
    }
    @RabbitListener(queues = "mq.basic") //核心注解 监听mq.basic这个队列
    public void receive2(String message) throws InterruptedException {
        Thread.sleep(500);
        System.out.println("接收message2 = " + message);
    }
    @RabbitListener(queues = "mq.basic") //核心注解 监听mq.basic这个队列
    public void receive3(String message) throws InterruptedException {
        Thread.sleep(500);
        System.out.println("接收message3 = " + message);
    }
}

能者多劳

在spring中有一个简单的配置,可以解决这个问题。我们修改consumer服务的application.yml文件,
添加配置:

spring:
rabbitmq:
listener:
simple:
prefetch: 1 # 每次只能获取一条消息,处理完成才能获取下一个消息 预先载入

总结

Work模型的使用:

  • 多个消费者绑定到一个队列,同一条消息只会被一个消费者处理
  • 通过设置prefetch来控制消费者预取的消息数量

六级标题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值