参考学习慕课网教程记录笔记
https://www.imooc.com/learn/856
为很么使用中间件
通过服务调用让其他系统感知事件发生
一个用户登录会触发很多事件
服务调用会一直增加,会调用外部的系统,
通过消息中间件解耦服务调用
利用消息中间件,用户登录后 发起消息给消息中间件,之后中间件异步发送给
其他服务
返回登录结果不必等待其他服务完成了。
消息中间件带来的好处:
解耦
异步
横向扩展
安全可靠
顺序保证
消息中间件概述
什么是中间件:
非底层操作系统软件,非业务应用软件,不是直接给最终用户使用的,
不能直接给客户带来价值的软件统称为中间件
什么是JMS
java消息服务,是一个java平台中关于面向消息中间件的API,用于在两个
应用程序之间,或分布式系统中发送消息,进行异步通信
什么是 AMQP
是一个提供统一消息服务的应用层标准协议,基于此协议的客户端与消息
中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制
ActiveMQ
ActiveMQ是 Apache出品,最流行的,能力强劲的开源消息总线。
ActiveMQ是一个完全支持 JMS1.1和J2EE1.4规范的JMS Provider实现,
尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中
仍然扮演着特殊的地位
特性:
多种语言和协议编写客户端。
语言:java,c,c++,c#,ruby,perl,python,php
应用协议: OPenWire,Stomp,REST,WS Notifcation,XMPP,AMQP
完全支持 JMS1.1和 J2EE1.4规范(自救花,XA消息,事务)
虚拟主题,组合目的,镜像队列
RabbitMQ
是一个开源的AMQP实现,服务端用 Erlang语言编写,用于在分布式系统中
存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
Kafka
特性:
综合:
中小企业:ActiveMQ
稳定性要求高的:RabbitMQ
应用在大数据日志或实时的:Kafka
JMS规范
提供者: 实现 JMS规范的消息中间件服务器
客户端: 发送或接收消息的应用程序
生产者/发布者:创建并发送消息的客户端
消费者/订阅者:接收并处理消息的客户端
消息:应用程序之间传递的数据内容
消息模式:在客户端之间传递消息的方式,JMS中定义了主题和队列的两种模式
队列模型
客户端包括生产者和消费者
队列中的消息只能被一个消费者消费
消费者可以随时消费队列中的消息
主题模式:
客户端包括发布者和订阅者
主题中的消息被所有订阅者消费
消费者不能消费订阅之前就发送到主题中的消息
JMS编码接口
ConnectionFactory 用于创建连接到消息中间件的连接工厂
Connectio 代表应用程序和消息服务器之间的通信链路
Destination 指消息发布和接收的地点,包括队列或主题
Session 表示一个单线程的上下文,用于发送和接收消息
NessageConsummer 由会话创建,用于接收发送到目标的消息
MessageProducer 由会话创建,用户发送消息到目标
Message 是在消费者和生产者之间传递的对象,消息头,一组消息属性,一个消息体