设为首页 加入收藏

TOP

ActiveMQ从入门到精通图文详解(一)
2023-07-26 08:18:21 】 浏览:311
Tags:ActiveMQ 从入门 通图文

这是关于消息中间件ActiveMQ的一个系列专题文章,将涵盖JMS、ActiveMQ的初步入门及API详细使用、两种经典的消息模式(PTP and Pub/Sub)、与Spring整合、ActiveMQ集群、监控与配置优化等。话不多说,我们来一起瞧一瞧!


JMS
首先来说较早以前,也就是没有JMS的那个时候,很多应用系统存在一些缺陷:


1.通信的同步性


client端发起调用后,必须等待server处理完成并返回结果后才能继续执行


2.client 和 server 的生命周期耦合太高


client进程和server服务进程都必须可用,如果server出现问题或者网络故障,那么client端会收到异常


3.点对点通信


client端的一次调用只能发送给某一个单独的服务对象,无法一对多


从入门到精通的ActiveMQ(一)


JMS


需要注意的是,JMS只是定义了Java访问消息中间件的接口,其实就是在包javax.jms中,你会发现这个包下除了异常定义,其他都是interface。我们可以扫一眼,比如Message:


从入门到精通的ActiveMQ(一)


Message接口


我想你应该发现了,JMS只给出接口,然后由具体的中间件去实现,比如ActiveMQ就是实现了JMS的一种Provider,还有阿里巴巴的RocketMQ(后续专题中在为大家介绍)。这些消息中间件都符合JMS规范。说起规范,自然要定义一些术语:


Provider/MessageProvider:生产者


Consumer/MessageConsumer:消费者


PTP:Point To Point,点对点通信消息模型


Pub/Sub:Publish/Subscribe,发布订阅消息模型


Queue:队列,目标类型之一,和PTP结合


Topic:主题,目标类型之一,和Pub/Sub结合


ConnectionFactory:连接工厂,JMS用它创建连接


Connnection:JMS Client到JMS Provider的连接


Destination:消息目的地,由Session创建


Session:会话,由Connection创建,实质上就是发送、接受消息的一个线程,因此生产者、消费者都是Session创建的


初步来看,Session非常核心,因为很多东西都是它创建的,在后文中可以通过代码来进一步认识这些术语。


ActiveMQ QuickStart
ActiveMQ是Apache出品的,非常流行的消息中间件,可以说要掌握消息中间件,需要从ActiveMQ开始,要掌握更加强大的RocketMQ,也需要ActiveMQ的基础,因此我们来搞定它吧。官网地址:http://activemq.apache.org/,目前最新的版本是5.14.4,我这边将以最新版来讲解。这篇文章主要是ActiveMQ的初步,因此我这边暂时用windows版本,后期采用Linux。



ActiveMQ目录结构


bin下面存放的是ActiveMQ的启动脚本activemq.bat,注意分32、64位


conf里面是配置文件,重点关注的是activemq.xml、jetty.xml、jetty-realm.properties。在登录ActiveMQ Web控制台需要用户名、密码信息;在JMS CLIENT和ActiveMQ进行何种协议的连接、端口是什么等这些信息都在上面的配置文件中可以体现。


webapps,注意ActiveMQ自带Jetty提供Web管控台


lib中ActiveMQ为我们提供了分功能的JAR包,当然也提供了activemq-all-5.14.4.jar


在JDK安装没有问题的情况下,直接activemq.bat启动它,并访问Web控制台!


从入门到精通的ActiveMQ(一)


ActiveMQ Start


到这里,ActiveMQ就已经启动了,So easy~


访问ActiveMQ web控制台的用户名、密码在哪里配置的?URL当中的端口是在哪里配置的?


从入门到精通的ActiveMQ(一)


username/pwd 4 access web


从入门到精通的ActiveMQ(一)


port 4 web console


Write Code 4 ActiveMQ
来一个HelloWorld级别的例子,来感受下ActiveMQ。具体来说,我这边会写一个生产者用于发送消息,一个消费者用于接收消息。实际上,JMS是有“套路”的,下面我将以生产者为例详细说明。


第一步:创建ConnectionFactory连接工厂


从入门到精通的ActiveMQ(一)


ConnectionFactory


实际上,这里是存在安全隐患的,也就是任何人一旦知道MQ的地址,就可以连接访问了,我们可以在activemq.xml中配置指定的用户、密码才能访问ActiveMQ。


关于broker_bind_url,默认就是tcp://localhost:61616,说明是采用TCP协议,61616端口。其实对于ActiveMQ不仅仅支持TCP协议,还有其他协议,开启了多个端口。


从入门到精通的ActiveMQ(一)


第二步:创建Connection


从入门到精通的ActiveMQ(一)


Connection


Connection就代表了应用程序和消息服务器之间的通信链路。获得了连接工厂后,就可以创建Connection。


事实上,ConnectionFactory存在重载方法:


Connection createConnection(String username,String password)


也就是说我们也可以在这里指定用户名、密码进行验证


第三步:创建Session


从入门到精通的ActiveMQ(一)


Session


Session,用于发送和接受消息,而且是单线程的,支持事务的。如果Session开启事务支持,那么Session将保存一组信息,要么commit到MQ,要么回滚这些消息。Session可以创建MessageProducer/MessageConsumer。


第四步:创建Destination


从入门到精通的ActiveMQ(一)


Destination


所谓消息目标,就是消息发送和接受的地点,要么queue,要么topic。


第五步:创建MessageProducer


从入门到精通的ActiveMQ(一)


MessageProducer


第六步:设置持久化方式


从入门到精通的ActiveMQ(一)


持久化方式设置


第七步:定义消息对象,并发送


从入门到精通的ActiveMQ(一)


Message


生产者和消费者之间传递的对象,由3个主要部分构成:


消息头(路由)+消息属性(消息选择器,以后介绍)+消息体(JMS规范的5种类型消息)


从入门到精通的ActiveMQ(一)


消息类型


第八步:释放连接


从入门到精通的ActiveMQ(一)


release resource


必须close connection,只有这样ActiveMQ才会释放资源!


消费者的代码和上面非常类似,只不过就是创建MessageConsumer进行receive而已,注意receive()/receive(long)/receiveNoWait(),这些说明消费者可以采用阻塞模式、非阻塞模式接受消息。


程序运行后,我们来看一下管控台:


从入门到精通的ActiveMQ(一)


ActiveMQ Web Info


Messages Enqueued:表示生产了多少条消息,记做P


Messages Dequeued:表示消费了多少条消息,记做C


Number Of Consumers:表示在该队列上还有多少消费者在等待接受消息


Number Of Pending Messages:表示还有多少条消息没有被消费,实际上是表示消息的积压程度,就是P-C


在说说Session
在通过Connection创建Session的时候,需要设置2个参数,一个是否支持事务,另一个是签收的模式。我们重点说一下签收模式:


从入门到精通的ActiveMQ(一)


签收模式


什么是签收?通俗点说,就是消费者接受到消息后,需要告诉消息服务器,我收到消息了。当消息服务器收到回

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇简单而有效的Linux Shell脚本示例.. 下一篇Python模块collections入门基础

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目