发布/订阅Pub-Sub消息
Pub-Sub有点1对多的意思,一个消息生产者,多个消息消费者共同接收。首先我们在JBoss中配置一个消息主题,生产者实际上是对此消息主题发送消息的,消息消费者实际上也是对此主题的消息进行接收的。
在此我们配置了一个名字叫做jbossJMSTopic的消息主题。
因为JMS1.1的标准在代码上已经完全屏蔽了PTP与Pub-Sub的差异性,所以我们上面的代码可以修改一下重复利用
消息消费者修改目的
Destination dest = (Destination) context.lookup("jbossJMSTopic"); |
消息生产者修改目的
Destination dest = (Destination) context.lookup("jbossJMSTopic"); |
其他代码不同变更
下面我们为了查看消息群发的效果,执行2遍消息消费者目的的代码,之后执行1遍消息生产者,看到的效果如下:
2个消息消费者控制台
其中一个消费者
textMessage:delegator->JBossMessage[21259541532164102]:PERSISTENT, deliveryId=0 消息内容hello 速速 |
另一个消费者
textMessage:delegator->JBossMessage[21259541532164102]:PERSISTENT, deliveryId=0 消息内容hello 速速 |
这证明了2个消费者都接收到了此消息。
当然,异步消费也和上面代码一样,就是替换一个目的地址就可以,底层的实现为开发者屏蔽了这些不同JMS信息模式的差异。
1. JMS消息常用的属性配置
JMS的消息再发送之前还可以设置一些消息属性
1.传递方式:
持久化保存消息
sender.setDeliveryMode(DeliveryMode.PERSISTENT); |
不用持久化保存消息
sender.setDeliveryMode(DeliveryMode.NON_PERSISTENT); |
2.消息的有效期时间
sender.setTimeToLive(2000); |
代表此消息2秒后就作废了,即使是将消息持久化到一个物理空间上,2秒钟后也会删除。如果不设置,默认是永远不会过期的。
3.消息的优先级
sender.setPriority(9); |
将此消息设置成优先级最大的9,相当于500里加急文书!。默认的优先级是4。
当然之前所有做的一切属性设置,最后如果调用了MessageProducer.send(消息实体,存储模式 , 优先级, 有效时间);这种最终、比较全面的方法所覆盖。