自动创建和删除队列


JBoss AMQ提供了自动创建和删除队列的功能。此功能在生产环境中可能非常有用,因为它允许用户为应用程序启用新地址,而无需重新启动路由器。


如果使用,则可以控制命名约定,以便所有地址都以指定的值开头。


自动创建和删除被配置为broker.xml配置文件中<address-setting>配置节点的一部分:

自动创建Queue与Topic配置:消息中间件系列5_java

(1)match属性负责限制命名地址。在此示例中,#是通配符,用于表示所有地址。在这种情况下,仅允许以/ jb440 / queue开头的地址自动创建队列。通配符将在本章后面详细讨论。


(2)如果此属性为true,则broker创建客户端请求的address(如果该address不存在)。默认值是true 。


(3)如果此属性为true,则代理将在删除其所有queue时删除该address。默认值是true 。


(4)如果定义为true,当sender或者cunsumer尝试向queue发送消息时,创建queue。


(5)代理使用此属性中定义的路由类型创建队列。可能的值为MULTICAST来创建发布-订阅队列,而ANYCAST来创建点对点队列。默认值为MULTICAST。在Java世界中,发布-订阅队列是JMS topic,而点对点队列是JMS queue。


要为JMS客户端创建点对点队列,address名称必须和queue指定相同的名称。如果指定了其他值,则客户端将无法使用和产生消息。

自动创建Queue与Topic配置:消息中间件系列5_java_02


队列自动创建实验展现

本实验将会模拟queue自动被创建。


查看JMS客户端源码:

自动创建Queue与Topic配置:消息中间件系列5_java_03

编译JMS客户端,报错,原因是没有对应的queue:


编辑/queue的配置文件:broker.xml文件。找到jb440/queue的地址设置元素,并将auto-create-queues更新为true。


将下图false位置修改为true:


修改为true:


然后重新编译JMS客户端,可以成功:

自动创建Queue与Topic配置:消息中间件系列5_java_04

 创建Multicast Queues


发布-订阅模式定义单个生产者向代理发送一条消息,然后代理将该消息相乘,为每个订户创建一条消息。

此模式可用于多种情况。例如,制造商可以将其软件与经销商软件集成在一起。制造商软件可以发送一条新消息,其中包含不能在60天内出售的产品列表。每个订阅了消费者的转销商都会收到有关产品的消息,并可以决定如何处理此信息。


JBoss AMQ支持发布-订阅消息传递模式。发送一条带有topic的消息。一个或多个订阅者订阅此主题,可以选择按topic进行过滤。JBoss AMQ为每个订阅者创建一个队列,并复制消息以支持主题功能。


要启用发布-订阅地址,请将多播标记添加为代理配置文件中的路由类型:

<address name="/example/endpoint">
<multicast/>
</address>

当/ example / endpoint地址上收到消息时,JBoss AMQ代理将为为每个订户创建的每个队列路由消息引用。直到所有订户都收到消息后,才会从系统中删除真实消息。


订阅有两种类型:

  • 非持久订阅:仅当订阅者连接到代理时,JBoss AMQ代理才会路由消息。如果在未连接用户时发送了一条消息,则该消息将被丢弃。

  • 持久订阅:即使在收到消息时与代理断开连接,JBoss AMQ代理也会将消息路由到订阅者。订户重新连接到代理后,消息即被传递。这意味着可以保证所有持久订阅者都将收到代理上产生的每条消息。


下图表示一个代理,该代理具有一个发布预订地址,其中包含两个持久预订和一个非持久预订。

自动创建Queue与Topic配置:消息中间件系列5_java_05

JBoss AMQ还允许用户为每个使用者定义队列名称,而不是自动创建每个队列。下面的示例为订户创建两个队列:

<address name="/example/endpoint">
<multicast><queue name="subscriber-1"><durable>true</durable></queue><queue name="subscriber-2"><durable>false</durable></queue></multicast>
</address>

实现展示queue的multicast--topic

本实验组提供了三个Java程序:


topic-producer:该程序在多播队列上产生两条消息。
durable-client:此程序有两个持久订阅者,这些订阅者使用多播队列中的消息。
non-durable-client:该程序具有三个不持久的订阅者,这些订阅者使用多播队列中的消息。



配置broker以使用名为/ jb440 / queue / exampleMulticastEndPoint的端点创建新的multicast queue。


编辑/home/student/JB440/labs/multicast/broker/etc/broker.xml文件,增加如下内容:

自动创建Queue与Topic配置:消息中间件系列5_java_06


然后启动broker。


查看持久化JMS client源码:

自动创建Queue与Topic配置:消息中间件系列5_java_07源码编译后,开始监听topic

自动创建Queue与Topic配置:消息中间件系列5_java_08

查看non-durable-client JMS client源码:

自动创建Queue与Topic配置:消息中间件系列5_java_09

编译后,监听topic:

自动创建Queue与Topic配置:消息中间件系列5_java_10

运行producer后,生产者向topic发送两条消息:

自动创建Queue与Topic配置:消息中间件系列5_java_11

查看非持久化JMS client:

自动创建Queue与Topic配置:消息中间件系列5_java_12

查看持久化JMS client:


自动创建Queue与Topic配置:消息中间件系列5_java_13