首页 » 网站推广 » phpactivescript技巧_ActiveMQ从入门到精晓一

phpactivescript技巧_ActiveMQ从入门到精晓一

访客 2024-11-19 0

扫一扫用手机浏览

文章目录 [+]

原文链接:https://www.jianshu.com/p/ecdc6eab554c

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

phpactivescript技巧_ActiveMQ从入门到精晓一

JMS

首先来说较早以前,也便是没有JMS的那个时候,很多运用系统存在一些毛病:

phpactivescript技巧_ActiveMQ从入门到精晓一
(图片来自网络侵删)

1.通信的同步性

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

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

client进程和server做事进程都必须可用,如果server涌现问题或者网络故障,那么client端会收到非常

3.点对点通信

client真个一次调用只能发送给某一个单独的做事工具,无法一对多

JMS,即Java Message Service,通过面向中间件(MOM:Message Oriented Middleware)的办法很好的办理了上面的问题。
大致的过程是这样的:发送者把发送给做事器,做事器将存放在多少行列步队/主题中,在得当的时候,做事器会将转发给接管者。
在这个过程中,发送和接管是异步的,也便是发送无需等待,而且发送者和接管者的生命周期也没有一定关系;在pub/sub模式下,也可以完成一对多的通信,即让一个有多个接管者。

JMS

须要把稳的是,JMS只是定义了Java访问中间件的接口,实在便是在包javax.jms中,你会创造这个包下除了非常定义,其他都是interface。
我们可以扫一眼,比如Message:

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进行何种协议的连接、端口是什么等这些信息都在上面的配置文件中可以表示。

data目录下是ActiveMQ进行持久化存放的地方,默认采取的是kahadb,当然我们可以采取leveldb,或者采取JDBC存储到MySQL,或者干脆不该用持久化机制。

webapps,把稳ActiveMQ自带Jetty供应Web管控台

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

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

ActiveMQ Start

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

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

username/pwd 4 access web

port 4 web console

Write Code 4 ActiveMQ

来一个HelloWorld级别的例子,来感想熏染下ActiveMQ。
详细来说,我这边会写一个生产者用于发送,一个消费者用于吸收。
实际上,JMS是有“套路”的,下面我将以生产者为例详细解释。

第一步:创建ConnectionFactory连接工厂

ConnectionFactory

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

关于broker_bind_url,默认便是tcp://localhost:61616,解释是采取TCP协议,61616端口。
实在对付ActiveMQ不仅仅支持TCP协议,还有其他协议,开启了多个端口。

第二步:创建Connection

Connection

Connection就代表了运用程序和做事器之间的通信链路。
得到了连接工厂后,就可以创建Connection。

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

Connection createConnection(String username,String password)

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

第三步:创建Session

Session

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

第四步:创建Destination

Destination

所谓目标,便是发送和接管的地点,要么queue,要么topic。

第五步:创建MessageProducer

MessageProducer

第六步:设置持久化办法

持久化办法设置

第七步:定义工具,并发送

Message

生产者和消费者之间通报的工具,由3个紧张部分构成:

头(路由)+属性(选择器,往后先容)+体(JMS规范的5种类型)

类型

第八步:开释连接

release resource

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

消费者的代码和上面非常类似,只不过便是创建MessageConsumer进行receive而已,把稳receive()/receive(long)/receiveNoWait(),这些解释消费者可以采取壅塞模式、非壅塞模式接管。

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

ActiveMQ Web Info

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

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

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

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

在说说Session

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

签收模式

什么是签收?普通点说,便是消费者接管到后,须要见告做事器,我收到了。
当做事器收到回执后,本条将失落效。
因此签收将对PTP模式产生很大影响。
如果消费者收到后,并不签收,那么本条连续有效,很可能会被其他消费者消费掉!

AUTO_ACKNOWLEDGE:表示在消费者receive的时候自动的签收

CLIENT_ACKNOWLEDGE:表示消费者receive后必须手动的调用acknowledge()方法进行签收

DUPS_OK_ACKNOWLEDGE:签不签收无所谓了,只要消费者能够容忍重复的接管,当然这样会降落Session的开销

在实际中,我们该当采取哪种签收模式呢?CLIENT_ACKNOWLEDGE,采取手动的办法较自动的办法可能更好些,由于吸收到了,并不虞味着成功的处理了,假设我们采取手动签收的办法,只有在成功处理的条件下才进行签收,那么只要处理失落败,那么还有效,仍旧会连续消费,直至成功处理!

关于的priority/ttl/deliveryMode

有优先级及存活韶光,在MessageProducer进行send的时候,存在多个重载方法,我们来看一下:

send

在上面的code当中,我们创建生产者的时候,指定了Destination,设置了持久化办法,实际上这些都可以不必指定的,而是到send的时候指定。
而且在实际业务开拓中,每每根据各种判断,来决定将这条发往哪个Queue,因此每每不会在MessageProducer创建的时候指定Destination。

TTL,的存活韶光,一句话:生产者生产了,如果消费者不来消费,那么这条保持多久的有效期

priority,优先级,0-9。
0-4是普通,5-9是加急,默认级别是4。
把稳,优先级只是一个理论上的观点,并不能绝对担保优先级高的一定被消费者优先消费!
也便是说ActiveMQ并不能担保消费的顺序性!

deliveryMode,如果不指定,默认是持久化的。
如果可以容忍的丢失,那么采取非持久化的办法,将会改进性能、减少存储的开销。

OK,Do you get it? Good Night~See u next time~

相关文章

介绍直播新纪元,轻松进入直播的五大步骤

随着互联网技术的飞速发展,直播行业在我国逐渐崛起,越来越多的人选择通过直播这一新兴媒介展示自己、分享生活、传递价值。对于许多新手来...

网站推广 2025-01-03 阅读1 评论0

介绍相机美颜原理,科技与美学的完美结合

随着科技的发展,智能手机的摄像头功能日益强大,美颜相机成为了许多人拍照的首选。美颜相机不仅满足了人们对于美的追求,更在视觉上给人带...

网站推广 2025-01-03 阅读1 评论0

介绍磁铁的制造,科学与艺术的完美结合

磁铁,一种神秘的物质,自古以来就吸引了无数人的目光。它不仅具有独特的磁性,还能在工业、医疗、科研等领域发挥重要作用。磁铁是如何制造...

网站推广 2025-01-03 阅读1 评论0

介绍电瓶激活方法,让电池焕发新生

随着科技的不断发展,电动汽车逐渐成为人们出行的首选。而电瓶作为电动汽车的核心部件,其性能直接影响着车辆的续航里程和行驶体验。新购买...

网站推广 2025-01-03 阅读1 评论0