java rabbitmq 您所在的位置:网站首页 rabbitmq的高可用 java rabbitmq

java rabbitmq

2023-04-13 09:59| 来源: 网络整理| 查看: 265

RabbitMQ1、简介

消息队列(Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列互交。消息会保存在队列中,直到接收者取回它。

1.1、实现

消息队列常常保存在链表结构中。拥有权限的进程可以向消息队列中写入或读取消息。

目前,有很多消息队列有很多开源的实现,包括 JBoss Messaging、JORAM、 Apache ActiveMQ、 Sun open Message Queue、IBM MQ、 Apache Qpid 和 HttpSQS。

当前使用较多的消息队列有 RabbitMQ、 RocketMQ、 ActiveMQ、 Kafka、zeroMQ、 MetaMQ等,而部分数据库如 Redis、Mysql以及 phxsql 也可实现消息队列的功能。

1.2、特点

MQ是消费者生产者模型的一个典型的代表,端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。

MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品。注意:1.AMQP,即 Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。2.JMS,Java消息服务(Java Message Service)应用程序接口,是个 java 平台中关于面向消息中间件的 API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java 消息服务是一个与具体平台无关的API,绝大多数 MOM 提供商都对 JMS 提供支持。常见的消息队列,大部分都实现了 JMS API,如 ActiveMQ, Redis 以及 Rabbit MQ 等。

1.3、优点

解耦:将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而原系统不需要做任何修改。

异步:把非必要的业务逻辑写入消息队列,需要消息的系统自己从消息队列中订阅,提高网站的响应效率。

流量削峰:系统 A 慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。

1.4、使用场景

当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候

2、安装

安装 Rabbit MQ 之前,先安装 erlang ,两者之间版本要对应。

rabbitmq-plugins enable rabbitmq_management 启动插件

2.1、管理界面1234567- 启动服务后,通过 http://localhost:15672/#/ 进入后台管理- Overview:查看概要信息- Connections:查看连接信息- Channels:通道列表- Exchanges:发送消息时,背后的交换机- Queues:队列- Admin:对应当前 Rabbit MQ 中的用户 2.2、使用

在 Admin 中创建用户,在 Virtual Hosts 中创建 virtual host ,并为用户分配权限

3、专业术语3.1、Direct Exchange

直连型交换机,根据消息携带的路由键将消息投递给对应队列。

大致流程,有一个队列绑定到一个直连交换机上,同时赋予一个路由键 routing key 。然后当一个消息携带着路由值为X,这个消息通过生产者发送给交换机时,交换机就会根据这个路由值X去寻找绑定值也是X的队列。

3.2、Fanout Exchange

扇型交换机,这个交换机没有路由键概念,就算你绑了路由键也是无视的。 这个交换机在接收到消息后,会直接转发到绑定到它上面的所有队列。

3.3、Topic Exchange

主题交换机,这个交换机其实跟直连交换机流程差不多,但是它的特点就是在它的路由键和绑定键之间是有规则的。简单地介绍下规则:

(星号 *) 用来表示一个单词 (必须出现的) (井号 #) 用来表示任意数量(零个或多个)单词

通配的绑定键是跟队列进行绑定的

举个小例子队列Q1 绑定键为 .TT.

队列Q2绑定键为 TT.#如果一条消息携带的路由键为 A.TT.B,那么队列Q1将会收到;如果一条消息携带的路由键为TT.AA.BB,那么队列Q2将会收到;

主题交换机是非常强大的当一个队列的绑定键为 “#”(井号) 的时候,这个队列将会无视消息的路由键,接收所有的消息。当 * (星号) 和 # (井号) 这两个特殊字符都未在绑定键中出现的时候,此时主题交换机就拥有的直连交换机的行为。所以主题交换机也就实现了扇形交换机的功能,和直连交换机的功能。

另外还有 Header Exchange 头交换机 ,Default Exchange 默认交换机,Dead Letter Exchange 死信交换机,这几个该篇暂不做讲述。

4、简单队列

有一个消费者和生产者,消费者生产消息,消费者消费消息,同时监听队列。

不适用于生产环境

5、工作队列5.1、轮询模式5.2、公平模式

公平分发,能者多劳

消费者设置每次接收的消息


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有