随笔分类 - rabbitMq
摘要:新版本,使用懒加载,直接在项目里面创建路由,队列启动项目会报错,要提前在管理平台创建并绑定队列才行
阅读全文
摘要:生产者 package com.wangbiao.consumer.config; import org.apache.logging.log4j.message.SimpleMessageFactory; import org.springframework.amqp.core.*; import
阅读全文
摘要:/** * 重复消费逻辑判断与处理 */ @Component public class RepeatMqConsumer { /** * 服务对象 */ private int count=1; @Autowired private DispatcherService dispatcherServ
阅读全文
摘要:#手动应答 #spring.rabbitmq.listener.simple.acknowledge-mode=manual #spring.rabbitmq.listener.simple.acknowledge-mode=none #不发生异常才应答 #spring.rabbitmq.liste
阅读全文
摘要://备份队列 @Bean("alternate_queue") public Queue alternate_queue() { return new Queue("alternate_queue", true); } //备份交换机 @Bean("alternate_exchange") publ
阅读全文
摘要:@Bean public RabbitTemplate rabbitTemplate(CachingConnectionFactory factory) { //若使用confirm-callback ,必须要配置publisherConfirms 为true factory.setpublishe
阅读全文
摘要:rabbitMq延迟投递的方案 1 把消息记录到数据路,通过定时器进行刷新 2 TTL 加上死信队列 :通过路由把过期的消息同步到死信队列,通过死信队列的消费者进行消费 3
阅读全文
摘要:x-max-length:队列最大容纳消息条数 大于设置条数的时候会把,消息队列头部(先进入消息)的消息移除 x-max-length-bytes:队列最大容量消息内存容量 服务端限流 内存控制流量:40% Conn vm_memory_high_watermark 磁盘控制:30% disk_fr
阅读全文
摘要:消费过程发生错误容易造成死循环 1.控制重发次数 2.try+catch+手动ack 3.try+catch+手动ack+死信队列(重试次数就失效了,因为捕捉确认后被打入了相应的死信队列) void basicAck(long deliveryTag, boolean multiple) throw
阅读全文
摘要:集群进入某个节点查看指令:rabbitmqctl cluster_status 单机版: docker run -d --name rabbit \ -e RABBITMQ_DEFAULT_USER=admin \ -e RABBITMQ_DEFAULT_PASS=admin \ -p 15672:
阅读全文
摘要:内存管控:https://www.rabbitmq.com/memory.html
阅读全文
摘要:在服务器上也可以改变配置文件修改内存 也可以使用命令进行分配: 相对内存:rabbitmqctl set_vm_memory_hgih_waterwmark 0.4 使用时可以把这个0.4替换成自己想要的百分比 绝对内存:rabbitmqctl set_vm_memory_hgih_waterwma
阅读全文
摘要:队列创建之后,后期对其修改或者参数添加会报错。需要把队列重新删除,重新创建线上环境不能把队列删除,优雅安全的方式是重新建一个队列,把死信队列相关的队列进行绑定 在有过期时间的队列中设定最大接收能力5条,5秒钟后大于5条的其余消息也会进入死信队列//设置过期队列 @Bean public Queue
阅读全文
摘要:第一种:给消息设置过期时间 启动一个插件 @Bean public DirectExchange DirectExchange() { return new DirectExchange("ttl_direct_exchange", true, false); } //给消息设置过期时间 @Bean
阅读全文
摘要:1.解耦,削峰异步 串行方式;业务1先完成,在完成业务2,然后完成业务3 1 2 3都没问题都返回给客户端 public class Events{ 业务1先完成, 在完成业务2, 然后完成业务3 } 2 并行执行 异步线程池 public class relationMessage(){ 异步执行
阅读全文
摘要:简单模式 Simple 工作模式 Work(可以选择设置轮询还是公平,默认就是轮询) 类型:无 特点:无分发机制 发布订阅模式(交换机默认为空的 AMOP-DEFAULT 路由模式) 类型:fanout 特点:Fanout 发布与订阅模式,是一种广播机制,他是没有路由Key的模式 路由模式 类型:d
阅读全文
摘要:channel.basicQos(10);//要根据机器内存设置 内存如上图所示,这里合理设置大小 比如5台集群, 每秒钟有1000个消息 那么每个信道设置为100,这样避免消耗掉服务器的内存 /** * TODO * * @author wangbiao * @Title TODO * @modu
阅读全文
摘要:RabbitMq的轮询模式不会因为机器的带宽不同而导致不对等消费 比如A 处理需要10ms,B处理需要1000ms ,两个消费者去消费20条会各消费10条 以下demo实现了均衡消费 package com.wangbiao.work.lunxun; import com.rabbitmq.clie
阅读全文
摘要:消息应答有ACK和NACK 两种模式 ACK: 消息已被成功处理 取出消息消费并移除 NACK: 消息处理异常, 需要重新投递 不会真的把消息移除 REJECT: 消息非法, 丢弃消息 队列消息里面有persitent持久化和非持久化之分 持久化会把消息记录磁盘,即使rabbit崩盘了也不会丢失,非
阅读全文