没有合适的资源?快使用搜索试试~ 我知道了~
WebSphere_MQ_Java
需积分: 9 1 下载量 107 浏览量
2013-04-07
16:40:55
上传
评论
收藏 130KB DOC 举报
温馨提示
使用WebSphere_MQ_Java和JMS_API_对消息进行分组.
资源推荐
资源详情
资源评论
转自 http://www.zuoyefeng.com/html/2006-09/212.htm
本文介绍了 WebSphere MQ 中的消息组支持,以及如何利用该支持来提供逻辑消
息排序和支持相关消息分组。并演示了如何使用 WebSphere MQ Java 类进行分组
操作,和如何使用 JMS API 实现与此相同的功能。随后,本文还给出了一个建议
解决方案,并说明了如何在 WebSphere Application Server 或其他 J2EE 应用服务器
中异步接收消息组时如何应用此解决方案。
消息组介绍
IBM® WebSphere® MQ 并不能始终保证发送和接收应用程序间的消息的正确顺序。
如果三条消息按照顺序 A B C 发送,可能不会按照相同的顺序到达(例如,如果
中间网络将消息分布到集群中,然后再重新组合时)。但如果消息顺序对应用程序
的正常工作非常重要又该如何呢?假设有这样的场景,消息 B 告知应用程序忽略
前一个消息。如果消息以顺序 C B A 送达,则序列的意义将完全不同了。
WebSphere MQ 通过消息分组来解决此问题。发送消息的应用程序可以指定其将消
息 A、B 和 C 作为组的一部分发送。组中的每个消息都分配了一个序列号(从 1
开始)。然后,接收应用程序可以指定希望按照此逻辑顺序接收消息(与消息到达
目的地的实际顺序相对)。现在,即使消息 B 或 C 首先到达,也不会将其立即传
递给应用程序,因为它们的序列号不为 1。
消息组还可用于另一个目的。有时候消息顺序可能并不重要,但可能要求将一个消
息集合一起处理(在空间上和时间上)。例如,假定有一个应用程序在每次向在线
购物车添加了物品后都会发送一条消息。购物车中的物品可能需要一起处理,或许
要将其聚合到单个订单消息中。可以通过将消息放入到消息组中对此聚合进行管理。
消息的接收者可以指定,在所有消息到达目的地之前,不希望接收组中的任何消息。
在此场景中,在同一个位置接收所有消息也很重要。如果出于可伸缩性方面的原因,
目的地有多个使用者,则务必将表示相同订单中的物品的所有消息发送到相同的使
用者,而消息组就可以确保满足这一要求。
消息组的概念与消息段不同,后者表示大型消息发送时被拆分为较小的消息,应在
接收时将其重新组装为原始消息。消息组中的每个实体都是一个完整的消息。可以
使用消息段对消息组内的消息进行拆分,但在本文中将不会考虑此选项。
使用 WebSphere MQ Java API
现在我们将讨论使用 WebSphere MQ Java™ API
发送和接收消息组的实际操作。
发送消息组
下面的清单 1 给出了使用 WebSphere MQ Java API 将包含五条消息的组发送到队列
管理器 QM_host 上的队列 default 所需的代码:
清单 1. 使用 WebSphere MQ Java API 发送消息组
MQQueueManager queueManager = new MQQueueManager("QM_host");
MQQueue queue = queueManager.accessQueue("default", MQC.MQOO_OUTPUT);
MQPutMessageOptions pmo = new MQPutMessageOptions();
pmo.options = MQC.MQPMO_LOGICAL_ORDER;
for (int i = 1; i <= 5; i++) {
MQMessage message = new MQMessage();
message.format = "MQSTR";
message.writeString("Message " + i);
if (i < 5) {
message.messageFlags = MQC.MQMF_MSG_IN_GROUP;
} else {
message.messageFlags = MQC.MQMF_LAST_MSG_IN_GROUP;
}
queue.put(message, pmo);
}
queue.close();
queueManager.disconnect();
该示例首先连接到队列管理器,并打开用于进行输出的队列句柄。从消息组的角度
而言,要注意的第一个重要方面是向 put 消息选项添加了约束
MQPMO_LOGICAL_ORDER。此值告知队列管理器,应用程序将把组中的每个消
息按照序列顺序放入队列中,客户机在处理任何后续消息前会将一个组中的所有消
息放置到其上。
此代码随后循环五次,每次放置一个新消息。(消息格式设置为 MQSTR,因此我
们可能稍后接收到 JMS 文本消息类型的消息。)对于前四条消息,设置了消息标
志 MQMF_MSG_IN_GROUP,以指示相应的消息应属于当前组。第五条消息设置
了消息标志 MQMF_LAST_MSG_IN_GROUP,以指示该消息是组中的最后一条消
息。下一次放置具有 MQMF_MSG_IN_GROUP 标志的消息时,将自动开始一个新
的组。
剩余9页未读,继续阅读
资源评论
yangliu0079
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功