万字长文书写RabbitMQ最全见解,以

青少年白癜风防治援助项目 https://m-mip.39.net/czk/mipso_4707223.html

典型应用场景

1、跨系统的异步通信人民银行二代支付系统,使用重量级消息队列IBMMQ,异步,解耦,削峰都有体现。

2、应用内地同步变成异步秒杀:自己发送给自己

3、基于Pub/Sub模型实现的事件驱动放款失败通知、提货通知、购买碎屏保系统间同步数据摒弃ELT(比如全量同步商户数据);摒弃API(比如定时增量获取用户、获取产品,变成增量广播)。

4、利用RabbitMQ实现事务的最终一致性

基本介绍

AMQP协议

AMQP,即AdvancedMessageQueuingProtocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件同产品、不同的开发语言等条件的限制。AMQP的实现有:RabbitMQ、OpenAMQ、ApacheQpid、RedhatEnterpriseMRG、AMQPInfrastructure、MQ、Zyre等。

RabbitMQ的特性

RabbitMQ使用Erlang语言编写,使用Mnesia数据库存储消息。

(1)可靠性(Reliability)RabbitMQ使用一些机制来保证可靠性,如持久化、传输确认、发布确认。

(2)灵活的路由(FlexibleRouting)在消息进入队列之前,通过Exchange来路由消息的。对于典型的路由功能,RabbitMQ已经提供了一些内置的Exchange来实现。针对更复杂的路由功能,可以将多个Exchange绑定在一起,也通过插件机制实现自己的Exchange。

(3)消息集群(Clustering)多个RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker。

(4)高可用(HighlyAvailableQueues)队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。

(5)多种协议(Multi-protocol)RabbitMQ支持多种消息队列协议,比如AMQP、STOMP、MQTT等等。

(6)多语言客户端(ManyClients)RabbitMQ几乎支持所有常用语言,比如Java、.NET、Ruby、PHP、C#、JavaScript等等。

(7)管理界面(ManagementUI)RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息、集群中的节点。

(8)插件机制(PluginSystem)RabbitMQ提供了许多插件,以实现从多方面扩展,当然也可以编写自己的插件

工作模型

三种主要的交换机

DirectExchange直连交换机

定义:直连类型的交换机与一个队列绑定时,需要指定一个明确的bindingkey。

路由规则:发送消息到直连类型的交换机时,只有routingkey跟bindingkey完全匹配时,绑定的队列才能收到消息。

例如:

//只有队列1能收到消息channel.basicPublish(MY_DIRECT_EXCHANGE,key1,null,msg.getBytes())

TopicExchange主题交换机

定义:主题类型的交换机与一个队列绑定时,可以指定按模式匹配的routingkey。通配符有两个,*代表匹配一个单词。#代表匹配零个或者多个单词。单词与单词之间用.隔开。

路由规则:发送消息到主题类型的交换机时,routingkey符合bindingkey的模式时,绑定的队列才能收到消息。

例如:

//只有队列1能收到消息channel.basicPublish(MY_TOPIC_EXCHANGE,sh.abc,null,msg.getBytes());//队列2和队列3能收到消息channel.basicPublish(MY_TOPIC_EXCHANGE,bj.book,null,msg.getBytes());//只有队列4能收到消息channel.basicPublish(MY_TOPIC_EXCHANGE,abc.def.food,null,msg.getBytes());

FanoutExchange广播交换机

定义:广播类型的交换机与一个队列绑定时,不需要指定bindingkey。

路由规则:当消息发送到广播类型的交换机时,不需要指定routingkey,所有与之绑定的队列都能收到消息。

例如:

//3个队列都会收到消息channel.basicPublish(MY_FANOUT_EXCHANGE,,null,msg.getBytes());

JavaAPI编程

创建Maven工程,pom.xml引入依赖

dependencygroupId


转载请注明:http://www.aierlanlan.com/rzdk/2617.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了