RabbitMQ
森林森
java学习
展开
-
Rabbitmq- 延迟队列
延迟队列延迟消息是指的消息发送出去后并不想立即就被消费,而是需要等(指定的)一段时间后才触发消费。例如下面的业务场景:在支付宝上面买电影票,锁定了一个座位后系统默认会帮你保留15分钟时间,如果15分钟后还没付款那么不好意思系统会自动把座位释放掉。怎么实现类似的功能呢?可以用定时任务每分钟扫一次,发现有占座超过15分钟还没付款的就释放掉。但是这样做很低效,很多时候做的都是些无用功;可以用分布式锁、分布式缓存的被动过期时间,15分钟过期后锁也释放了,缓存key也不存在了;还可以用延迟队列原创 2020-11-13 09:03:57 · 155 阅读 · 0 评论 -
Rabbitmq-集群管理
集群管理3台虚拟机192.168.181.140-node-linux140192.168.181.141-node-linux141192.168.181.142-node-linux142安装在linux140、linux141、linux142三台Linux虚拟机中安装RabbitMQ从linux140拷贝.erlang.cookie到nodlinux141e3、linux142的相应目录如果没有该文件,手动创建 /var/lib/rabbitmq/.erlang.cookie ,生原创 2020-11-09 19:58:22 · 826 阅读 · 2 评论 -
Rabbitmq-死信队列
死信队列用户下单,调用订单服务,然后订单服务调用派单系统通知外卖人员送单,这时候订单系统与派单系统 采用 MQ异步通讯在定义业务队列时可以考虑指定一个 死信交换机,并绑定一个死信队列。当消息变成死信时,该消息就会被发送到该死信队列上,这样方便我们查看消息失败的原因。DLX,全称为Dead-Letter-Exchange,死信交换器。消息在一个队列中变成死信(Dead Letter)之后,被重新发送到一个特殊的交换器(DLX)中,同时,绑定DLX的队列就称为“死信队列”。以下几种情况导致消息变为死原创 2020-11-05 21:27:02 · 105 阅读 · 0 评论 -
RabbitMq- TTL机制
在京东下单,订单创建成功,等待支付,一般会给30分钟的时间,开始倒计时。如果在这段时间内用户没有支付,则默认订单取消。该如何实现?定期轮询(数据库等)用户下单成功,将订单信息放入数据库,同时将支付状态放入数据库,用户付款更改数据库状态。定期轮询数据库支付状态,如果超过30分钟就将该订单取消。优点:设计实现简单缺点:需要对数据库进行大量的IO操作,效率低下。TimerSimpleDateFormat simpleDateFormat = newSimpleDateFormat(.原创 2020-11-05 21:21:38 · 705 阅读 · 0 评论 -
RabbitMq - 消息可靠性
消息可靠性分布式锁这个比较容易理解,就是在操作某条数据时先锁定,可以用redis或zookeeper等常用框架来实现。 比如我们在修改账单时,先锁定该账单,如果该账单有并发操作,后面的操作只能等待上一个操作的锁释放后再依次执行。优点:能够保证数据强一致性。 缺点:高并发场景下可能有性能问题消息队列 消息队列是为了保证最终一致性,我们需要确保消息队列有ack机制 客户端收到消息并消费处理完成后,客户端发送ack消息给消息中间件 如果消息中间件超过指定时间还没收到ack消息,则定时去重发消息比如我原创 2020-11-05 21:14:17 · 411 阅读 · 1 评论 -
RabbitMq Connection 和Channel关系
Connection 和Channel关系生产者和消费者,需要与RabbitMQ Broker 建立TCP连接,也就是Connection 。一旦TCP 连接建立起来,客户端紧接着创建一个AMQP 信道(Channel),每个信道都会被指派一个唯一的ID。信道是建立在Connection 之上的虚拟连接, RabbitMQ 处理的每条AMQP 指令都是通过信道完成的为什么不直接使用TCP连接,而是使用信道?RabbitMQ 采用类似NIO的做法,复用TCP 连接,减少性能开销,便于管理。当每个信道原创 2020-11-03 20:45:48 · 1371 阅读 · 0 评论 -
RabbitMQ工作流程
RabbitMQ工作流程生产者发送消息的流程生产者连接RabbitMQ,建立TCP连接( Connection),开启信道(Channel)生产者声明一个Exchange(交换器),并设置相关属性,比如交换器类型、是否持久化等生产者声明一个队列井设置相关属性,比如是否排他、是否持久化、是否自动删除等生产者通过 bindingKey (绑定Key)将交换器和队列绑定( binding )起来生产者发送消息至RabbitMQ Broker,其中包含 routingKey (路由键)、交换器等信息原创 2020-11-03 19:17:05 · 276 阅读 · 0 评论 -
安装和配置RabbitMQ
安装和配置RabbitMQRabbitMQ的安装需要首先安装Erlang,因为它是基于Erlang的VM运行的。RabbitMQ需要的依赖:socat和logrotate,logrotate操作系统中已经存在了,只需要安装socat就可以了。RabbitMQ与Erlang的兼容关系详见:https://www.rabbitmq.com/which-erlang.html安装rabbitmq安装依赖yum install socat -y安装Erlangerlang-23.0.2-原创 2020-11-03 18:59:06 · 79 阅读 · 0 评论 -
RabbitMQ介绍、概念、基本架构
RabbitMQ介绍、概念、基本架构RabbitMQ介绍RabbitMQ,俗称“兔子MQ”(可见其轻巧,敏捷),是目前非常热门的一款开源消息中间件,不管是互联网行业还是传统行业都广泛使用(最早是为了解决电信行业系统之间的可靠通信而设计)。高可靠性、易扩展、高可用、功能丰富等支持大多数(甚至冷门)的编程语言客户端。RabbitMQ遵循AMQP协议,自身采用Erlang(一种由爱立信开发的通用面向并发编程的语言)编写。RabbitMQ也支持MQTT等其他协议。RabbitMQ具有很强大原创 2020-11-03 18:50:17 · 3331 阅读 · 1 评论 -
window下安装RabiitMQ
1.安装erlang网址:http://www.erlang.org/ 下载exe文件安装即可2.安装RabbitmQ下载地址:http://www.rabbitmq.com/download.html下载rabbitmq-server-3.6.5exe文件并安装3.添加RabbitMQ用户在Windows命令行进入安装目录的sbin目录下:D:\RabbitMQ Server\rabbitmq_server-3.6.5\sbin运行 rabbitmqctl.bat add_user r原创 2020-08-25 09:32:55 · 93 阅读 · 0 评论 -
centos7 安装rabbitmq
下载erlanghttp://www.erlang.org/downloads/19.3解压与安装安装依赖包yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel libtool libtool-ltdl-devel 解压tar zxvf otp-src_19.2.tar.gz配置cd opt_src_19.3./otp_build autoco原创 2020-08-25 09:32:21 · 109 阅读 · 0 评论 -
queueBind与exchangeBind方法
queueBind 队列绑定方法Queue.BindOk queueBind(String queue, String exchange, String routingKey) throws IOException; Queue.BindOk queueBind(String queue, String exchange, String routingKey, Map<Strin...原创 2019-05-29 20:45:37 · 2972 阅读 · 0 评论 -
RabbitMQ死信机制实现延迟队列
延迟队列延迟队列存储的对象肯定是对应的延时消息,所谓”延时消息”是指当消息被发送以后,并不想让消费者立即拿到消息,而是等待指定时间后,消费者才拿到这个消息进行消费RabbitMQ本身没有直接支持延迟队列功能,但是可以通过以下特性模拟出延迟队列的功能。 但是我们可以通过RabbitMQ的两个特性来曲线实现延迟队列:Time To Live(TTL) 和 Dead Letter Excha...原创 2019-05-30 17:57:31 · 447 阅读 · 0 评论 -
RabbitMQ与spring结合-fanout消息
RabbitMQ与spring结合-fanou消息https://docs.spring.io/spring-amqp/docs/2.1.6.RELEASE/reference/html/#_introductionspring官网<dependency> <groupId>org.springframework.amqp</groupId> &l...原创 2019-05-31 10:58:54 · 727 阅读 · 0 评论 -
RabbitMQ与spring结合-direct消息
RabbitMQ与spring结合-direct消息https://docs.spring.io/spring-amqp/docs/2.1.6.RELEASE/reference/html/#_introductionspring官网<dependency> <groupId>org.springframework.amqp</groupId> &...原创 2019-05-31 11:17:02 · 315 阅读 · 0 评论 -
RabbitMQ与spring结合-topic消息-延时队列
RabbitMQ与spring结合-topic消息https://docs.spring.io/spring-amqp/docs/2.1.6.RELEASE/reference/html/#_introductionspring官网<dependency> <groupId>org.springframework.amqp</groupId> &l...原创 2019-05-31 11:50:22 · 548 阅读 · 0 评论 -
RabbitMQ-hello
pom文件<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.7.0</version></dependency><dependenc...原创 2019-05-28 20:19:16 · 120 阅读 · 0 评论 -
rabbitmq exchange类型
RabbitMQ-Exchange类型Exchange概念Exchange:交互机,根据路由键转发消息到绑定的队列服务器发送消息不会直接发送到队列中(Queue),而是直接发送给交换机(Exchange),然后根据确定的规则,RabbitMQ将会决定消息该投递到哪个队列。这些规则称为路由键(routing key),队列通过路由键绑定到交换机上。消息发送到服务器端(broker),消息也有自...原创 2019-05-29 14:19:39 · 227 阅读 · 0 评论 -
channel.exchangeDeclare方法介绍
exchangeDeclare /** * Declare an exchange. * @see com.rabbitmq.client.AMQP.Exchange.Declare * @see com.rabbitmq.client.AMQP.Exchange.DeclareOk * @param exchange the name of the ex...原创 2019-05-29 20:02:32 · 7849 阅读 · 0 评论 -
queueDeclare方法
queueDeclareQueue.DeclareOk queueDeclare() throws IOException; /** * Declare a queue * @see com.rabbitmq.client.AMQP.Queue.Declare * @see com.rabbitmq.client.AMQP.Queue.DeclareOk ...原创 2019-05-29 20:44:54 · 3480 阅读 · 0 评论 -
Exchange fanout方式 一个生产者多个消费者
生产者package com.ghgcn.mq.test01;import java.io.IOException;import java.util.concurrent.TimeUnit;import java.util.concurrent.TimeoutException;import com.rabbitmq.client.BuiltinExchangeType;impor...原创 2019-05-30 16:55:22 · 773 阅读 · 0 评论