分布式消息通信 ActiveMQ(一)

消息中间件的初步认识

什么是消息中间件?

  消息中间件是指利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递消息排队模型,可以在分布式架构下扩展进程之间的通信。

消息中间件能做什么?

  消息中间件主要解决的就是分布式系统之间消息传递的问题,它能够屏蔽各种平台以及协议之间的特性,实现应用程序之间的协同。
  拿电商平台的注册功能简单分析下,用户注册这一个服务,不单单只是insert一条数据到数据库里面就完事了,还需要发送激活邮件、发送新人红包或者积分、发送营销短信等一系列操作。假如说这里面每一个操作,都需要消耗1s,那么整个注册过程就需要4s中才能反馈给用户。
在这里插入图片描述
  但是我们从注册这个服务可以看到,每一个子操作都是相对独立的。同时,基于领域划分后,发送邮件、发送营销短信、赠送红包或者积分都属于不同的子域。所以我们可以对这些子操作进行异步化执行,类似于多线程并行处理的概念。
  如何实现异步化呢?用多线程能实现么?多线程当然可以实现。只是,消息的持久化、消息的重发这些条件,多线程并不能满足。所以需要借助一些开源中间件来解决。而分布式消息队列就是一个非常好的解决方法,引入分布式消息队列以后,架构图就变成下图(异步消息队列的场景)。通过引入分布式队列,就能大大提升程序的处理效率,并且还解决了各模块之间的耦合问题
在这里插入图片描述
  再展开一种场景,通过分布式消息队列来实现流量整形,比如在电商平台的秒杀场景下,流量会非常大。通过消息队列的方式可以很好的缓解高流量的问题。
在这里插入图片描述
  用户提交的请求,先写入消息队列。消息队列是有长度的,如果消息队列长度超过指定的长度,直接抛弃。秒杀的具体核心处理业务,接收消息队列中消息进行处理,这里的消息处理能力取决于消费段本身的吞吐量。
  当然,消息中间件还有很多应用场景,比如在弱一致性事务模型中,可以采用分布式消息队列的实现最大能力通知方式来实现数据的最终一致性等等。

ActiveMQ简介

  ActiveMQ 是完全基于 JMS 规范实现的一个消息中间件产品。 是 Apache 开源基金会研发的消息中间件。 ActiveMQ主要应用在分布式系统架构中,帮助构建高可用、 高性能、可伸缩的企业级面向消息服务的系统。

ActiveMQ特性

  1. 多语言和协议编写客户端
    语言: java/C/C++/C#/Ruby/Perl/Python/PHP
    应 用 协 议 :
    openwire/stomp/REST/ws/notification/XMPP/AMQP
  2. 完全支持 jms1.1 和 J2ee1.4 规范
  3. 对 spring 的支持, ActiveMQ 可以很容易内嵌到 spring 模块中

ActiveMQ 安装

  1. 登 录 到 http://activemq.apache.org/activemq-5150-release.html, 找到 ActiveMQ 的下载地址
  2. 直 接 copy 到 服 务 器 上 通 过 tar -zxvf apacheactiveMQ.tar.gz
  3. 启动运行
    a) 普通启动:到 bin 目录下, sh activemq start
    b) 启 动 并 指 定 日 志 文 件 sh activemq start > /tmp/activemqlog
  4. 检查是否已启动
    ActiveMQ默认采用 61616 端口提供 JMS服务,使用 8161端口提供管理控制台服务,执行以下命令可以检查是否成功启动 ActiveMQ 服务
    netstat -an|grep 61616
  5. 通过 http://192.168.11.156:8161 访问 activeMQ 管理页面 ,默认帐号密码 admin/admin
  6. 关闭 ActiveMQ; sh activemq stop

从 JMS 规范来了解 ActiveMQ

JMS 定义

  Java 消息服务(Java Message Service)是 java 平台中关于面向消息中间件的 API,用于在两个应用程序之间,或者分布式系统中发送消息,进行异步通信。
  JMS 是一个与具体平台无关的 API,绝大多数 MOM(Message Oriented Middleware)(面向消息中间件)提供商都对 JMS 提供了支持。 ActiveMQ 就是其中一个实现。

什么是MOM?

  MOM 是面向消息的中间件,使用消息传送提供者来协调消息传送操作。 MOM 需要提供 API 和管理工具。客户端使用 api 调用,把消息发送到由提供者管理的目的地。在发送消息之后,客户端会继续执行其他工作,并且在接收方收到这个消息确认之前,提供者一直保留该消息。
在这里插入图片描述
MOM 的特点

  1. 消息异步接收,发送者不需要等待消息接受者响应
  2. 消息可靠接收,确保消息在中间件可靠保存。只有接收方收到后才删除消息

  Java 消息传送服务规范最初的开发目的是为了使 Java应用程序能够访问现有 MOM 系统。引入该规范之后,它已被许多现有的 MOM 供应商采用并且已经凭借自身的功能实现为异步消息传送系统。

其他开源JMS提供商

  其他开源的 JMS 提供商JbossMQ(jboss4) 、 jboss messaging(jboss5) 、 joram 、ubermq、 mantamq、 openjms…大部分基于的 JMS provider 开源的消息中间件都已经停止维护了,剩下的几个都抱到了大腿,比如 Jboss mq 和 jboss、joram 与 jonas(objectweb 组 织 ) 、 ActiveMQ 与Geronimo(apache 基金组织)。

JMS 规范

  我们已经知道了 JMS 规范的目的是为了使得 Java 应用程序能够访问现有 MOM (消息中间件)系统, 形成一套统一的标准规范,解决不同消息中间件之间的协作问题。 在创建 JMS 规范时,设计者希望能够结合现有的消息传送的精髓,比如说:

  1. 不同的消息传送模式或域,例如点对点消息传送发布/订阅消息传送
  2. 提供接收同步异步消息的工具
  3. 可靠消息传送的支持
  4. 常见消息格式,例如流、文本和字节

JMS体系结构

在这里插入图片描述

通过 JMS 规范结合 ActiveMQ 实现消息发送案例

消息生产端代码:

		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://172.16.29.152:61616");
        Connection connection = null;
        try {
   
            connection = connectionFactory.createConnection();
            connection
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值