-
源码路径:https://github.com/suxiongwei/springboot-rabbitmq
安装顺序:若提前安装3,会提示缺少秘钥
1、 rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm
2、rpm -ivh socat-1.7.3.2-5.el7.lux.x86_64.rpm
3、rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
查看全部 -
RabbitMQ简介及AMPQ协议
RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ 是使用Erlang 语言来编写的,并且RabbitMQ是基于AMQP协议的。
RabbitMQ底层采用Erlang 语言进行编写
开源、性能优秀,稳定性保障
与SpringAMQP完美的整合、API丰富
集群模式丰富,表达式配置,HA模式,镜像队列模型
保证数据不丢失的前提做到高可靠性、可用性
AMQP全程:Advanced Message Queuing Protocol
AMQP翻译:高级消息队列协议
AMQP协议模型
查看全部 -
准备:
yum install
build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz
下载
wget
www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm
http://repo.iotti.biz/CentOS/7/x86_64/socat-1.7.3.2-5.el7.lux.x86_64.rpm
www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm
配置:
vim /etc/hosts 以及 /etc/hostname
配置文件:
vim /user/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app
启动:rabbitmq-server start &
停止: rabbitmqctl app_stop
管理插件:
rabbitmq-plugins enable rabbitmq_management
访问地址:http://127.0.0.1:15672/
查看全部 -
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.26</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
查看全部 -
保障100%消息投递成功设计方案步骤:
Step 1: 首先把消息信息(业务数据)存储到数据库中,紧接着,我们再把这个消息记录也存储到一张消息记录表里(或者另外一个同源数据库的消息记录表)。
Step 2:发送异步消息到MQ Broker节点(采用confirm方式发送,会有异步的返回结果)。
Step 3、4:生产者端接受MQ Broker节点返回的Confirm确认消息结果,然后进行更新消息记录表里的消息状态。比如默认Status = 0 当收到消息确认成功后,更新为1即可!
Step 5:但是在消息确认这个过程中可能由于网络闪断、MQ Broker端异常等原因导致回送消息失败或者异常(即step2发送消息成功了,但step3失败)。这个时候就需要发送方(生产者)对消息进行可靠性投递了,保障消息不丢失,保障100%的投递成功!(有一种极限情况是闪断,Broker返回的成功确认消息,但是生产端由于网络闪断没收到,这个时候重新投递可能会造成消息重复,需要消费端去做幂等处理)所以我们需要有一个定时任务,(比如每5分钟拉取一下处于中间状态的消息,当然这个消息可以设置一个超时时间,比如超过1分钟 Status = 0 ,也就说明了1分钟这个时间窗口内,我们的消息没有被确认,那么会被定时任务拉取出来)。
Step 6:接下来我们把中间状态的消息进行重新投递 retry send,继续发送消息到MQ ,当然也可能有多种原因导致发送失败。
Step 7:我们可以采用设置最大努力尝试次数,比如投递了3次,还是失败,那么我们可以将最终状态设置为Status = 2 ,最后 交由人工解决处理此类问题(或者把消息转储到失败表中)。
注意:此方案只保证100%投递成功,不保证是否出现多投的情况,需要消费者做幂等。
查看全部 -
普遍采用的是镜像队列模式
查看全部 -
消息队列查看全部
-
第一要去看一下交换机的四种类型。其次,这里面order.#就是所有order开头的都会路由到order-queue
order.*只表示一段模糊匹配
查看全部 -
##springboot整合rabbitmq消费端配置
spring.rabbitmq.listener.simple.concurrency=5
spring.rabbitmq.listener.simple.max-concurrency=10
spring.rabbitmq.listener.simple.ackonwlege-mode=AUTO
spring.rabbitmq.listener.simple.prefetch=1
查看全部 -
application.properties中的配置
spring.rabbitmq.addresss=127.0.0.1:5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.connection-timeout=15000
server.servlet.context-path=/
server.port=8001
spring.http.encoding.charset=UTF-8
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
spring.jackson.default-property-inclusion=NON_NULL
查看全部 -
Direct exchange(直连交换机)
直连型交换机(direct exchange)是根据消息携带的路由键(routing key)将消息投递给对应队列的,步骤如下:
将一个队列绑定到某个交换机上,同时赋予该绑定一个路由键(routing key)
当一个携带着路由值为R的消息被发送给直连交换机时,交换机会把它路由给绑定值同样为R的队列。
Fanout exchange(扇型交换机)
扇型交换机(funout exchange)将消息路由给绑定到它身上的所有队列。不同于直连交换机,路由键在此类型上不启任务作用。如果N个队列绑定到某个扇型交换机上,当有消息发送给此扇型交换机时,交换机会将消息的发送给这所有的N个队列
Topic exchange(主题交换机)
主题交换机(topic exchanges)中,队列通过路由键绑定到交换机上,然后,交换机根据消息里的路由值,将消息路由给一个或多个绑定队列。
扇型交换机和主题交换机异同:
对于扇型交换机路由键是没有意义的,只要有消息,它都发送到它绑定的所有队列上
对于主题交换机,路由规则由路由键决定,只有满足路由键的规则,消息才可以路由到对应的队列上
Headers exchange(头交换机)
类似主题交换机,但是头交换机使用多个消息属性来代替路由键建立路由规则。通过判断消息头的值能否与指定的绑定相匹配来确立路由规则。
此交换机有个重要参数:”x-match”
当”x-match”为“any”时,消息头的任意一个值被匹配就可以满足条件
当”x-match”设置为“all”的时候,就需要消息头的所有值都匹配成功
查看全部 -
step1. 数据入库同时消息(msg)入库
step2.发送消息
step3.请求确认 confirm
step4.读取数据库msg消息修改状态status:1
step5.但发送消息网络中断,通过定时任务查询状态为status:0的消息
step6.抓取消息,重新投递
step7.最大尝试次数 3次 不能成功则状态修改为2。
查看全部 -
Routing路由key匹配规则 *和# 的区别 *号匹配一个点后 的,例如Oder.*
,但是oder.12.a z第二个点就不匹配了,#号可以匹配
查看全部 -
publisher 生产者 Consumer消费者 Exchange路由 Message Queue消息队列
查看全部 -
AMQP:高级消息队列协议
生产者将消息发送到交换机,交换机通过路由将消息发给消息队列,消费者从消息队列中拿去数据
查看全部
举报