mq比较 可参考 MQ选型对比ActiveMQ,RabbitMQ,RocketMQ,Kafka 消息队列框架选哪个?
springboot 整合 avtivemq 可参考
springboot 整合activemq 的两种模式 queue和topic 模式 demo代码
1、pom文件需要增加amqp依赖
<!--rabbitmq amqp的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2、配置文件增加rabbitmq配置参数
spring:
rabbitmq:
host: 127.0.0.1
port: 5672
#virtual-host: /hello
#此处需要登录http://localhost:15672 平台进行新建用户,并且注意赋予权限
username: test
password: 123456
main:
#允许其他bean的覆盖
allow-bean-definition-overriding: true
3、demo 代码,内附详细说明
需要说明的是:
rabbitTemplate.convertAndSend(key,msg);//输出时没有顺序,不需要等待,直接运行
rabbitTemplate.convertSendAndReceive(key,msg);//使用此方法,只有确定消费者接收到消息,才会发送下一条信息,每条消息之间会有间隔时间(约5s)
demo代码链接: springboot整合rabbitmq 五种模式及死信队列的demo代码.
rabbitmq 五种模式:
简单模式(easy):一个生产者对应一个消费者(单对单)
工作模式(work):一个生产者对应一个消费者(单对多 ),但是只有一个消费者可以获取消息
发布/订阅模式(fanout): 队列绑定到交换机,每个队列都能收到消息
路由模式(direct): 队列绑定到交换机,根据key 路由键规则发送,指定一个队列获取消息
主题模式(topic): 队列绑定到交换机,根据路由规则进行发送,满足规则就能接收消息
*注意:上述模式 同个队列的消费者轮询接收消息
死信队列:当一个消息在队列中死亡则进入死信消息队列
应用场景:例如:订单队列接收超过10秒未能处理成功则进入死信队列,进行异常订单的处理
参数设置
Arguments:
参数名 | 值范围 | 表示意义 |
---|---|---|
x-max-priority | 整数值 1-255 | 表示消息队列的优先级别,3.5.0版本开始支持,推荐1-10内设置,数值越大优先级别越高; |
x-message-ttl | 单位毫秒/ms | 队列中消息超时时间,单位ms |
x-max-length | 整数值 | 队列中消息最大数量,超过指定长度将会把最早的几条删除掉 |
x-dead-letter-exchange | 死信队列交换机名称 | 声明死信队列的交换机,当队列消息长度大于最大长度、或者过期的等,将从队列中删除的消息推送到指定的交换机中去而不是丢弃掉 |
x-dead-letter-routing-key | 死信队列key路由键名称 | 声明死信队列的路由键名称,将删除的消息推送到指定交换机的指定路由键的队列中去 |
x-expires | 整数值 | 当队列在指定的时间没有被访问(consume, basicGet, queueDeclare…)就会被删除,Features=Exp |
x-max-length-bytes | 整数值 | 限定队列最大占用的空间大小, 一般受限于内存、磁盘的大小 |
x-queue-mode | string | Lazy Queues: x-queue-mode=lazy 懒队列,先将消息保存到磁盘上,不放在内存中,当消费者开始消费的时候才加载到内存中,在磁盘上尽可能多地保留消息以减少RAM使用;如果未设置,则队列将保留内存缓存以尽可能快地传递消息。 |
x-overflow | String | 设置队列溢出行为。这决定了当达到队列的最大长度时,消息会发生什么。有效值为Drop Head或Reject Publish。 |
x-queue-master-locator | String | 设将队列设置为主位置模式,确定在节点集群上声明时队列主位置所依据的规则。 |