RabbitMQ

rabbitmq是一个消息代理,核心就是发送消息、接收消息

 

图为简单的helloworld的原理图

生产者创建一个叫queue的队列,然后把消息体发送到这个队列,但是他不能直接发送到这个队列,他需要发送给交换机,这里用默认交换机exchange,指定队列名称queue,然后发送。

消费者首先会声明这个队列,因为要确保这个队列存在所以反复声明,然后使用回调函数接收消息进行处理

 

基本概念:

broker:队列服务的容器

消息:发送的字符串

connection:应用与broker的连接

channel:消息队列的通道

交换机:核心,队列名又叫路由键,用来通过路由键把消息转发到绑定的队列中

绑定:一个绑定就是基于路由键和交换机连接起来的路由规则

队列:消息的容器,也是消息的终点。消息可以投入一个或者多个队列,然后等待消费者把消息取走。

 

如何保证消息和业务操作一直,不丢失? 主流的MQ产品都有持久化功能,如果消费宕机或者消费失败,都有执行重试机制,有的还可以定义重试次数

分布式系统事物一致性其中的解决方案:

rocketMQ第一阶段会发送A消息,并且拿到A消息的地址,第二阶段进行事物的操作并修改消息的状态,第三阶段rocketMQ回去消息集群中定时扫描事物消息,当他发现A消息的时候,他会询问这个消息是成功了还是失败了,成功了是发消息还是回滚,然后根据发送方的策略,进行发送消息或者回滚,这样就保证了发送消息和本地事物同时成功或者失败

 

如何处理失败的队列或者说防止发送失败队列的方法有哪些?

失败的方式有两种,一种是发送失败,一种是接收失败

解决,如果发送失败解决的方式就是在发送之前记录一下状态,在接收成功之后进行修改状态,如果是数据库错误可以用trycatch拦截并尝试处理,如果一直处理失败可以记录log文件,然后单独处理失败的数据。

posted @ 2017-03-31 13:54  魏什么魏什么啊  阅读(218)  评论(0编辑  收藏  举报