**EBS与RocketMQ交互**
**RocketMQ概述**
消息队列(Message Queue,简称MQ)是企业级互联网架构的核心产品,服务于整个阿里巴巴集团已超过 10
年,经过阿里巴巴交易核心链路反复打磨与历年双十一购物狂欢节的严苛考验,是一个真正具备低延迟、高并发、高可用、高可靠,可支撑万亿级数据洪峰的分布式消息中间件
RocketMQ是一个分布式消息中间件,并支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。它里面有几个区别于标准消息中件间的概念,如Group、Topic、Queue等。系统组成则由Producer、Consumer、Broker、NameServer等。
RocketMQ以Topic来管理不同应用的消息,对于生产者(producer)而言,发送消息时需要指定消息的Topic,对于消费者(consumer)而言,在启动后需要订阅相应的Topic,然后可以消费相应的消息。Topic是逻辑上的概念,在物理实现上,一个Topic由多个Queue组成,采用多个Queue的好处是可以将Broker存储分布式化,提高系统性能。
**RocketMQ逻辑结构图**
**专业术语**
**Producer**
消息生产者,生产者的作用就是将消息发送到
MQ,生产者本身既可以产生消息,如读取文本信息等。也可以对外提供接口,由外部应用来调用接口,再由生产者将收到的消息发送到 MQ。
**Producer Group**
生产者组,简单来说就是多个发送同一类消息的生产者称之为一个生产者组。在这里可以不用关心,只要知道有这么一个概念即可。
**Consumer**
消息消费者,简单来说,消费 MQ 上的消息的应用程序就是消费者,至于消息是否进行逻辑处理,还是直接存储到数据库等取决于业务需要。
**Consumer Group**
消费者组,和生产者类似,消费同一类消息的多个 consumer 实例组成一个消费者组。
**Topic**
Topic 是一种消息的逻辑分类,比如说你有订单类的消息,也有库存类的消息,那么就需要进行分类,一个是订单 Topic 存放订单相关的消息,一个是库存
Topic 存储库存相关的消息。
**Message**
Message 是消息的载体。一个 Message 必须指定 topic,相当于寄信的地址。Message 还有一个可选的 tag 设置,以便消费端可以基于
tag 进行过滤消息。也可以添加额外的键值对,例如你需要一个业务 key 来查找 broker 上的消息,方便在开发过程中诊断问题。
**Tag**
标签可以被认为是对 Topic 进一步细化。一般在相同业务模块中通过引入标签来标记不同用途的消息。
**Broker**
Broker 是 RocketMQ 系统的主要角色,其实就是前面一直说的 MQ。Broker 接收来自生产者的消息,储存以及为消费者拉取消息的请求做好准备。
**Rocket的特点**
**Rocket的特点**
1,支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型
2,在一个队列中可靠的先进先出(FIFO)和严格的顺序传递
3,支持拉(pull)和推(push)两种消息模式
4,单一队列百万消息的堆积能力
5,支持多种消息协议,如 JMS、MQTT 等
6,分布式高可用的部署架构,满足至少一次消息传递语义
7,提供 docker 镜像用于隔离测试和云集群部署
8,提供配置、指标和监控等功能丰富的 Dashboard
**RocketMQ本地部署**
** 相关软件: ** ****
alibaba-rocketmq-3.2.6.tar.gz
IDEA(其他JAVA开发工具也可以)
**依赖JAR包:**
rocketmq-client-3.2.6.jar
rocketmq-common-3.2.6.jar
rocketmq-remoting-3.2.6.jar
slf4j-api-1.7.5.jar
netty-all-4.0.25.Final.jar
**说明:** rocketmq-3.2.6
RocketMq依赖jdk1.7,默认会从系统环境变量JAVA_HOME获取jdk地址。如果需要自己指定jdk地址,可以修改bin目录下mqnamesrv.xml和mqbroker.xml文件中javahome的值
**如下图所示**
**启动RocketMQ**
** 本地启动 ** ****
1,解压alibaba-rocketmq-3.2.6.tar.gz到c:\software
2,启动nameserver,双击运行mqnamesrv.exe
3,启动broker,cmd打开运行窗口,切换到bin目录下(C:\alibaba-rocketmq-3.2.6\alibaba-rocketmq\bin)
运行命令:mqbroker -n 127.0.0.1:9876 或者mqbroker.exe -n 127.0.0.1:9876
autoCreateTopicEnable=true
-n 指定nameserver的地址
如果启动闪退,可以到用户目录下查看日志:
**编写生产者**
**生产者代码样例**
**启动生产者**
**生产者推送消息**
**编写消费者**
**消费者样例代码**
**启动消费者**
消费者获取消息
**RecoketMQ部署EBS**
如何在将JAVA代码部署到EBS系统? ****
1\. 将依赖JAR导入系统,将生产者和消费者写成java source
2\. 用IDEA工具直接JAVA Class文件和所依赖JAR打包好生成新的JAR包,定义主机并发程序,调用JAR包
方法一需要导入的JAR包太多(导入前文提到的5个JAR包会依赖其他的JAR包),舍弃
本文档采取的是方法二(如果有更好的方法,请大神们补充)
打包JAR包
**部署EBS**
**打包JAR包**
**参考:**
https://jingyan.baidu.com/article/7e4409531fbf292fc1e2ef51.html
**上传JAR至服务器**
** 上传对象: CUXCUSTOMER.prog, test.jar
**
**上传路径: $CUX_TOP/bin**
上传完成后需要.prog文件修改权限和建立连接
chmod 777 CUXCUSTOMER.prog
ln -s $FND_TOP/bin/fndcpesr $CUX_TOP/bin/CUXCUSTOMER(执行路径:$CUX_TOP/bin)
**运行消费者**
END作者:江 空 秋
审核:邓金边
编辑:朱思聪