赞
踩
Publisher
Server
Virtual Host
Exchange
Queue
Consumer
启动
rabbitmq-server start &
rabbitmq 默认端口号5672,查看是否启动
lsof -i:5672
安装插件rabbitmq-management后才能登录
查看插件列表
rabbitmq-plugins list
启动插件
rabbitmq-plugins enable rabbitmq-management
rabbit-management管控台的端口号15672
浏览器访问:http://localhost:15672/
Producer
Consumer
Exchange
AMQP核心概念
1. 引入相关pom
2. 配置application.yml
3. 对象Message 实现接口 implements Serilizable
4. Producer,RabbitTemplate自动装配@Autowired
消费者自动监听 @RabbitHandler @RabbitListener
5. 生产者发消息:converAndSend(exchange, routeKey, MessageObject, CorrelationData); 交换机,路由key,消息体内容,消息唯一id
消费者监听消息:
@RabbitListener指定bindings,queue,exchange,routingKey. 这个注解强大的地方是当交换机,队列,绑定关系,路由键不存在时自动创建;
@RabbitListener(bindings= @QueueBinding(
value=@Queue(value="order-queue",durable="true"),
exchange= @Exchange(name="order-exchange",durable="true",type="topic"),
key="order.*")
)
@RabbitHandler
public void onOrderMessage(@Payload Order order, @Headers Map<String,Object> headers, Channel channel){ #**消息体,headers,通道**
// 消费者操作
// ...
Long deliveryTag = (Long)headers.get(AmqpHdears.DELIVEY_TAG);
// 当配置为手动签收时,必须要手动ACK,否则管理控制台即使消费了还是显示队列有数据。
channel.basicAck(deliveryTag,false); // 手动确认提交
}
可以在管理界面:http://xx.xx.xx.xx:15672/ 创建交换机,队列,交换机和队列进行绑定,或者删除;
路由key RoutingKey: order.*, order.#匹配差别;
order.#: order.111 order.111.abcd 只能匹配前者;
order.#: order.111 order.111.abcd 都能匹配;
<!--rabbitmq依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
# springboot整合rabbitmq基本配置
spring.rabbitmq.addresses=xx.xx.xx.xx:5672
# address相当于host,port
# spring.rabbitmq.host=xx.xx.xx.xx
# spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/
spring.rabbitmq.connection-timeout=15000
# 保证100%投递模式
# 发送消息后等待消息确认
spring.rabbitmq.publisher-confirms=true
spring.rabbitmq.publisher-returns=true
spring.rabbitmq.template.mandatory=true
# springboot整合rabbitmq消费端配置
# 并发数
spring.rabbitmq.listener.simple.concurrency=5
# 自动签收 NONE AUTO manual
spring.rabbitmq.listener.simple.acknowledge-model=AUTO
spring.rabbitmq.listener.simple.max-concurrency=15
spring.rabbitmq.listener.simple.idle-event-interval=10000
spring.rabbitmq.listener.simple.retry.enabled=true
# 高峰期海量数据压过来,则进行限流,表示最大100条
#spring.rabbitmq.listener.simple.prefetch=100
# 不建议事务,性能太差了
#spring.rabbitmq.listener.simple.transaction-size=1
蓝色框为生产者
红色框为消费者
为保证100%生产者消息投递成功,当Sender在收到需要发送的消息时
这种情况只能保证100%发送到队列,但可能会重复推送,需要消费者业务端自动去确认收到重复消息的处理。
记录消息体,重试次数,投递状态,下一次投递时间或者超时时间,下次重试投递时间;
生产者:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。