自动创建和删除队列
JBoss AMQ提供了自动创建和删除队列的功能。此功能在生产环境中可能非常有用,因为它允许用户为应用程序启用新地址,而无需重新启动路由器。
如果使用,则可以控制命名约定,以便所有地址都以指定的值开头。
自动创建和删除被配置为broker.xml配置文件中<address-setting>配置节点的一部分:
(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自动被创建。
查看JMS客户端源码:
编译JMS客户端,报错,原因是没有对应的queue:
编辑/queue的配置文件:broker.xml文件。找到jb440/queue的地址设置元素,并将auto-create-queues更新为true。
将下图false位置修改为true:
修改为true:
然后重新编译JMS客户端,可以成功:
创建Multicast Queues
发布-订阅模式定义单个生产者向代理发送一条消息,然后代理将该消息相乘,为每个订户创建一条消息。
此模式可用于多种情况。例如,制造商可以将其软件与经销商软件集成在一起。制造商软件可以发送一条新消息,其中包含不能在60天内出售的产品列表。每个订阅了消费者的转销商都会收到有关产品的消息,并可以决定如何处理此信息。
JBoss AMQ支持发布-订阅消息传递模式。发送一条带有topic的消息。一个或多个订阅者订阅此主题,可以选择按topic进行过滤。JBoss AMQ为每个订阅者创建一个队列,并复制消息以支持主题功能。
要启用发布-订阅地址,请将多播标记添加为代理配置文件中的路由类型:
<address name="/example/endpoint">
<multicast/>
</address>
当/ example / endpoint地址上收到消息时,JBoss AMQ代理将为为每个订户创建的每个队列路由消息引用。直到所有订户都收到消息后,才会从系统中删除真实消息。
订阅有两种类型:
非持久订阅:仅当订阅者连接到代理时,JBoss AMQ代理才会路由消息。如果在未连接用户时发送了一条消息,则该消息将被丢弃。
持久订阅:即使在收到消息时与代理断开连接,JBoss AMQ代理也会将消息路由到订阅者。订户重新连接到代理后,消息即被传递。这意味着可以保证所有持久订阅者都将收到代理上产生的每条消息。
下图表示一个代理,该代理具有一个发布预订地址,其中包含两个持久预订和一个非持久预订。
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文件,增加如下内容:
然后启动broker。
查看持久化JMS client源码:
源码编译后,开始监听topic
查看non-durable-client JMS client源码:
编译后,监听topic:
运行producer后,生产者向topic发送两条消息:
查看非持久化JMS client:
查看持久化JMS client: