1, 做用html
系统解耦 , 异步处理, 横向扩展(扩展消费者系统),安全可靠,顺序保证,解决并发,分布式java
2, 什么是中间件git
非底层操做系统软件,非业务应用软件,不是直接给最终用户使用的,不能直接给客户带来价值的软件,通称为中间件github
21, 什么是消息中间件web
关注于数据的发送和接受,利用高效可靠的异步消息传递机制集成分布式系统spring
什么是JMS安全
java 消息服务,用于两个应用程序直接或者分布式系统中发送消息,进行异步通讯。Java API 。服务器
RabbiMQ 在 银行或者金融方面使用比较多, activeMQ用于中小企业。 kafka用于 大数据处理网络
JMS 消息模式架构
1, 队列模型
11,客户端包括生产者和消费者
12,队列中的消息只能被一个消费者消费
13,消费者能够随时消费队列中的消息
分摊处理消息
2, 主题模型
21, 客户端包括发布者和订阅者
22,主题中的消息被全部订阅者消费
23,消费者不能消费订阅以前就发送到主题中的消息
JMS 编码接口
ConnectionFactory 用于建立链接到消息中间件的链接工厂、
Connection 表明了应用程序和消息服务器之间的通讯链路
Destination 指消息发布和接收的地点,包括队列或者主题
Session表示一个单线程的上下文,用于发送和接收消息
MessageConsumer 由会话建立,用于接收发送到目标的消息
MessageProducer 由会话建立,用于发送消息到目标
Massage 是消费者和生产者之间传递的对象,消息头,一组消息属性,一个消息体
注意 在windown 平台下 启动mq 尽可能使用管理员身份,不然可能会出现权限上致使的其余错误
activeMQ的默认用户名和密码是 admin admin
https://www.cnblogs.com/zhming26/p/6094364.html
对于win下来讲 , 安装目录的bin 里面的 activemq.bat 就是启动 mq ,若是关闭窗口那么mq就关闭了
InstallService.bat 就是 将mq 做为一个 服务 程序来管理
集成spirng
1. ConnectionFactory 用于管理链接的链接工厂
11. 一个spring 提供的链接池
JmsTemplate 每次发消息都会从新建立链接,会话和productor
12 . spring 中提供了
SingleConnectionFactory 和 CachingConnectionFactory
2. JmsTemplate 用于发送和接收消息的模板类
21. 是spring提供的,只需向spring 容器内注册这个类,就可使用JmsTemplate 方便的操做jms
22. JmsTemplate 类是线程安全的,能够在整个应用范围使用
3. MessageListerner 消息监听器
31, 实现一个onMessage 方法,该方法只接收一个Message参数,对消息的处理
集群 activemq
1,
客户端集群: 让多个消费者消费同一个队列
broker cluster : 多个broker之间同步消息
master slave : 实现高可用(主从,主被)
2, 客户端配置
失效转移
容许当其中一台消息服务器挂了,客户端在传输层上从新链接到 其余消息服务器
ativemq 的失效转移 语法 failover
参数:transportOptions
randomize 默认true ,表示在URI 列表中选择 URI 链接时是否采用随机策略
initialReconnectDelay 默认10 ,毫秒, 表示第一次尝试重连之间等待的时间
maxReconnectDelay 默认30000 , 毫秒, 最长重连的时间间隔
3, 集群原理
节点之间 消息同步
networkConnector 网络链接器
网络链接器主要用于配置activemq 服务器与服务器之间的网络通信方式,用于服务器透传消息
网络链接器, 分为 静态链接,与动态链接 (多播方式)
master / slave 集群配置
activeMQ Master Slave 集群方案
1,share nothing storage master/slave (过期,从5.8 后移除)
2, share storage master/slave 共享存储
首先A 节点服务器 抢到了 资源,成为主机
若是A挂了,那么B故障就转移到B,
3, replicated leveldb store 基于复制的leveldb store (比较强),至少须要3台服务器
先选A节点做为主机, 而后 A节点服务,经过zookeeper 传送数据到节点B,C上
至少又一台机器能够服务,同时 一台机挂了 要尽快恢复
broker cluster 配置
!—配置网络链接,采用静态发现。duplex=true,意味双向链接,192.168.91.8和192.168.91.8两个Broker则无须配置--> <networkConnectors> <networkConnector name="localNetwork" uri="static://(tcp://192.168.91.8:61616,tcp://192.168.91.8:61676)" duplex="true"/> </networkConnectors>
也就是 说 加上了 duplex=true 其余 链接的节点 mq 服务器就不用配置了。虽然配置也能够
若是不加上 duplex=true 那么 对应其余节点服务器也要对应配置 networkconnector 网络链接才能够。
broker cluster 也就是说 节点mq 服务器都是消费者,也是生产者,均可以消费其余节点生产的消息。
可是 在 mq 管理web页面上 不能知道 其余mq 并不能知道 其余mq 生产了那些消息。
也就是说, 当 某个节点生产消息,挂掉以后, 其余节点并不能消费到 以前生产的消息的。
master slave 配置测试
只要配置相同的 kahaDB directory 地址 ,
那么先启动的mq就是主机,其余的就是备机。
被机 是拒绝全部访问的,也就是 被机不能消费 主机生产的消息。
哪怕 被机配置了 broker cluster 也是没用的,其余节点的mq服务器不能链接它的
https://www.jianshu.com/p/5bcdcb4739e1
企业级系统应用
好比
特色
子业务系统都有集群的可能性
同一个消息会广播给关注该类消息的全部自业务系统
同一类消息在集群中被负载消费
业务的发生和消息的发布最终一致性
须要解决的问题
1.不一样业务系统分别处理同一个消息,同一个业务系统负载处理同类消息
可是以上又一个问题,中转器 须要负载,高可用,增长一个队列就须要一个中转器
解决办法
2.解决消息发送时的一致性问题
使用jms中XA系统接口保证强一致性
21, 引入分布式事务
22. 要求业务操做必须支持XA协议(弱一致性,最终保证一致性)
23,
24.
3.解决消息处理的 幂等性问题
或者内存日志
4. 基于消息机制创建事件总线
事件驱动架构
事件驱动架构,定义了一个设计和实现一个应用系统的方法学,在这个系统里事件可传输于松散耦合的组件和服务之间。
特色:有事通知,没事不打扰
其余消息中间件
1, 解决各业务系统集群处理同一条消息
2, 实现本身的消息提供者
rabbitMQ
kafka
源码地址: github.com/jovezhao/nest
以上来自慕课网