网站seo 文章转载 修改标题,重庆seo技术博客,网站开发公司怎么做账,招聘网站排行榜ActiveMQ介绍 一、JMS1.jms介绍2.jms消息传递模式3.JMS编码总体架构 二、消息中间件三、ActiveMQ介绍1.引入的原因1.1 原因1.2 遇到的问题1.3 解决思路 2.定义3.特点3.1 异步处理3.2 应用系统之间解耦3.3 实际-整体架构 4.作用 一、JMS
1.jms介绍
jms是java消息服务接口规范主要包含四大元素生产者、消费者、消息、消息服务。 生产者创建消息并把消息发动到消息服务消费者从消息服务接收消息消息服务即MQ消息服务broker而生产者与消费者相对其均为客服端消息整个消息服务的传输对象消息包含消息头、消息属性、消息体 常用消息头属性JMSDestination(消息目的地如果生产者指定了目的地在发送时会改为生产者绑定的目的地)、JMSDeliveryMode(是持久还是非持久)、JMSExpiration(过期时间默认永久)、JMSPriority(优先级0-9数值越大优先级越高默认为4)、JMSMessageId(唯一的消息ID) 消息属性可视为消息头属性的扩展通过setXxxProperty(k,v)设置 消息体封装消息的具体数据发送与接收的消息体类型必须一致消息体类型总共有5种TextMessage、Mapmessage、BytesMessage、StreamMessage、ObjectMessage 2.jms消息传递模式
jms消息传递模式有如下两种 点对点消息传递模式P2P消息发送到一个特殊队列(queue), 消费者从队列获取消息一条消息只能被只能被一个消费者消费发布/订阅消息传递模式(publish-subscribe)消息被发送到一个主题上(topic)所有订阅了该主题的消费者都能接收到消息。
3.JMS编码总体架构
JMS应用程序由如下基本模块组成 1.连接工厂对象创建消息客户端(生产者、消费者)与消息服务端的连接(connection)2.连接对象创建回话对象(session);3.会话对象创建生产者对象(producer)、消费者对象(consumer)以及消息对象(message)4.目的地(queue/topic)点对点模式下目的地是队列(queue)发布/订阅模式下目的地是主题(topic)生产者把消息发送到目的地消费者从目的地接收消息
Destination-目的地
总共有两大模式 队列Queue队列是一种一对一的消息传递模式。在队列中消息发送方生产者将消息发送到队列中然后消息接收方消费者从队列中接收并处理消息。每条消息只会被一个消费者接收和处理确保了消息的顺序性和唯一性。主题Topic主题是一种一对多的消息传递模式。在主题中消息发送方生产者将消息发送到主题中然后所有订阅该主题的消息接收方消费者都会收到该消息。每个消费者都可以独立地接收和处理消息消息的传递是广播式的可以实现发布-订阅模式。类似公众号N个人订阅就有N个人收到消息。
二、消息中间件
消息中间件是实现了jms规范的落地产品目前市场上主流的消息中间件有 ActiveMQ、Kafka、RocketMQ、RabbitMQ等。企业开发中使用消息中间件的主要目的是 解决耦合调用、抵御洪峰流量(削峰)等。 以下主要讲解ActiveMQ的使用。
三、ActiveMQ介绍
官网地址
1.引入的原因
1.1 原因
微服务架构后链式调用是我们在写程序时候的一般流程,为了完成一个整体功能会将其拆分成多个函数(或子模块)比如模块A调用模块B,模块B调用模块C,模块C调用模块D。但在大型分布式应用中系统间的RPC交互繁杂一个功能背后要调用上百个接口并非不可能从单机架构过渡到分布式微服务架构的通例
1.2 遇到的问题
系统之间接口耦合严重 举个例子如果系统A要发送数据给系统B和系统C发送给每个系统的数据可能有差异因此系统A对要发送给每个系统的数据进行了组装然后逐一发送当代码上线后又新增了一个需求把数据也发送给D新上了一个D系统也要接受A系统的数据此时就需要修改A系统让他感知到D系统的存在同时把数据处理好再给D。在这个过程你会看到每接入一个下游系统都要对系统A进行代码改造开发联调的效率很低。 面对大流量并发时容易被冲垮 每个接口模块的吞吐能力是有限的这个上限能力如果是堤坝当大流量洪水来临时容易被冲垮。举个例子秒杀业务上游系统发起下单购买操作我就是下单一个操作下游系统完成秒杀业务逻辑读取订单库存检查库存冻结余额检查余额冻结订单生产余额扣减库存减少生成流水余额解冻库存解冻 等待同步存在性能问题 RPC接口上基本都是同步调用整体的服务性能遵循“木桶理论”即整体系统的耗时取决于链路中最慢的那个接口。比如A调用B/C/D都是50ms但此时B又调用了B1花费2000ms那么直接就拖累了整个服务性能。
1.3 解决思路
解耦要做到系统解耦当新的模块接进来时可以做到代码改动最小削峰设置流量缓冲池可以让后端系统按照自身吞吐能力进行消费不被冲垮异步强弱依赖梳理能将非关键调用链路的操作异步化并提升整体系统的吞吐能力
2.定义
面向消息的中间件message-oriented middlewareMOM能够很好的解决以上问题是指利用高效可靠的消息传递机制与平台无关的数据交流并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型在分布式环境下提供应用解耦弹性伸缩冗余存储、流量削峰异步通信数据同步等功能。 发送者把消息发送给消息服务器消息服务器将消息存放在若干队列/主题topic中在合适的时候消息服务器回将消息转发给接受者。在这个过程中发送和接收是异步的也就是发送无需等待而且发送者和接受者的生命周期也没有必然的关系尤其在发布pub/订阅sub模式下也可以完成一对多的通信即让一个消息有多个接受者。 ActiveMQ 是 Apache 推出的一款 开源免费的完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现的消息中间件Message Oriented Middleware,MOM
3.特点
3.1 异步处理
消息发送者可以发送一个消息而无须等待响应。消息发送者将消息发送到一条虚拟的通道主题或者队列上消息接收者则订阅或者监听该爱通道。一条消息可能最终转发给一个或者多个消息接收者这些消息接收者都无需对消息发送者做出同步回应。整个过程都是异步的。 这样的一种通信方式就是所谓的“异步”通信方式对于系统A来说只需要把消息发送给MQ然后系统B就会异步的去进行处理了系统A不需要“同步”的等待系统B处理完成。 这样的好处是 解耦
3.2 应用系统之间解耦
发送者和接收者不必了解对方只需要确认消息发送者和接收者不必同时在线
3.3 实际-整体架构 4.作用
解耦削峰异步