10分钟看看消息中间件MQ
2018-04-03 本文已影响331人
林檎果
消息中间件的必要性
传统的用法

- 如果每增加一个服务就要修改登陆系统里的调用的话,非常的麻烦而不具备扩展性

- 通过消息中间件解耦,新拓展的功能就只需要订阅登陆信息
好处
- 解耦
- 异步
- 横向扩展
- 安全可靠,持续化保存起来
- 顺序保证,队列
JMS和AMQP
- JMS是Java领域的,代表为ActiveMQ
- AMQP是通用的,代表为RabbitMQ
- Kafka是新型的,也是java优先
JMS规范
基本概念
- 提供者:实现JMS的消息中间件服务器
- 客户端:发送或接收消息的应用程序
- 生产者/消费者:创建并发送消息的客户端
- 消费者/订阅者:接收并处理消息的客户端
- 消息:传递的数据
- 消息模式:主体和队列两种
JMS消息模式
- 队列模型:
- 生产者/消费者
- 队列中的消息只能被一个消费者消费
- 消费者随时消费队列中的消息

- 主题模式:
- 发布者/订阅者
- 主体中的消息被所有订阅者消费
-
消费者不能消费订阅之前就发送到的主题中的消息
image
JMS编码接口
- ConnectionFactory用于创建连接到消息中间件的连接工场。
- Connection代表了应用程序和消息服务器之间的通信链路
- Destination指消息发布和接收的地点,包括队列或主题
- Session表示一个“单线程”的上下文,用于发送和接收消息
- MessageConsumer由会话创建,用于接收发送到目标的消息
- MessageProducer由会话创建,用于发送消息到目标
- Message是消费者和生产者之间的传送对象,消息头:一组消息属性,一个消息体

ActiveMQ集群
集群配置
好处
- 实现高可用,以排除单点故障引起的服务中断
- 实现负载均衡,以提升效率为更多客户提供服务
集群方式
- 客户端集群:让多个消费者消费同一个队列
- Broker clusters:多个Broker之间同步消息
- Master Slave:实现高可用
客户端配置
- ActiveMQ失效转移(failover):允许其中一台宕机时,客户端连到其他的
Broker CLuster集群配置
- NodeA和NodeB消息同步实现原理是网络连接器
- 网络连接器(NetworkConnector):配置ActiveMQ服务器之间的消息透传。分为动态(多播)和静态(固定的几个ip)连接器。
Master/Slave集群配置
- 共享存储集群:看哪个slave抢到资源锁就是master,可写入持久化。负载均衡。
- 基于复制的LevelDB Store的原理:依靠ZooKeeper选取Master节点,其他节点接受同步。高可用性,立即有备份服务器补充上去,但slave不具备服务外部的能力。
其他MQ
RabbitMQ简介

步骤:
- 创建ConnectionFactory
- 创建Channel
- 创建Exchange
- 创建Connection
- 定义Queue并绑定队列
示例代码:
示例代码
- 普通的队列模式和主题模式源码,https://github.com/linxinzhe/jms-producer-consumer
- 和Spring结合的ActiveMQ源码,https://github.com/linxinzhe/jms-spring
关于我:
linxinzhe,全栈工程师,目前供职于某500强通信企业。人工智能,区块链爱好者。
GitHub:https://github.com/linxinzhe
欢迎留言讨论,也欢迎关注我~
我也会关注你的哦!