Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JMS IBM MQ-限制浏览时返回消息的大小_Java_Jms_Ibm Mq - Fatal编程技术网

Java JMS IBM MQ-限制浏览时返回消息的大小

Java JMS IBM MQ-限制浏览时返回消息的大小,java,jms,ibm-mq,Java,Jms,Ibm Mq,在我的场景中,队列包含大量(32MB+)消息,并且数据的结构使得标识消息类型的信息包含在消息的前几个字节中 使用低级Websphere MQ API时,可以提供特定(有限)大小的缓冲区,然后使用包含MQGMO_ACCEPT_TRUNCATED_MSG标志的选项发出MQGET调用。MQGET返回的原因码可能是MQRC_TRUNCATED_MSG_ACCEPTED(这是预期的) 这使我们能够编写一种非常快速的“浏览全部”逻辑,返回每条消息的第一个(比如)100字节,而不是每条消息的完整缓冲区 可以使

在我的场景中,队列包含大量(32MB+)消息,并且数据的结构使得标识消息类型的信息包含在消息的前几个字节中

使用低级Websphere MQ API时,可以提供特定(有限)大小的缓冲区,然后使用包含MQGMO_ACCEPT_TRUNCATED_MSG标志的选项发出MQGET调用。MQGET返回的原因码可能是MQRC_TRUNCATED_MSG_ACCEPTED(这是预期的)

这使我们能够编写一种非常快速的“浏览全部”逻辑,返回每条消息的第一个(比如)100字节,而不是每条消息的完整缓冲区

可以使用JavaJMS做类似的事情吗?我无法找到任何允许我在两个服务器上指定缓冲区大小的内容 创建浏览器(队列…)或 getEnumeration()调用


谢谢。

您没有选择模式然后定义数据,而是拥有了数据并希望强制其符合模式。这有点倒退

问题:

(1) 您是否将不同类型的数据放入同一队列?i、 e.多个不同类型的发送者

(2) 发送方(发布方)是JMS应用程序吗

(3) 您是否正在尝试创建一个应用程序,该应用程序将像IIB(MessageBroker)那样移动/过滤消息?如果不是,那么你的计划的真正目的是什么


每个唯一的应用程序都应该有自己的队列。在万圣节前夜,排队的人应该像蜡烛一样分发给孩子们

i、 e.假设人力资源部有以下5个应用程序:

  • 招募
  • 工资单
  • 利益
  • 训练
  • 雇员
不要创建一个名为“HR.Q”的队列来处理所有HR消息。糟糕的设计,不好的支持

相反,每个唯一的应用程序都应该有自己的队列。 i、 e

  • '人力资源招聘.Q'
  • '人力资源工资单'
  • '人力资源福利.Q'
  • '人力资源培训.Q'
  • “HR.EMPLOYEES.Q”

我觉得IBM MQ对我来说太特殊了。我在JMS中从未见过这样的事情。听起来是个糟糕的设计。如果您需要了解消息类型,可能应该为每种消息类型使用一个主题。这样的东西对你有帮助吗?谢谢,我看了你提供的链接。这基本上就是我正在做的。问题是,正常的浏览方式会重新播放那些占用大量资源的巨大消息。我得到的最接近可能的答案是[link])——该帖子使用了ibm mq特定的jms api(我使用的是vanilla javax.jms类)。他让mqrc_截断了_msg_失败了,但它看起来好像是由通道问题引起的。我更喜欢使用JMS,而不是将自己与蓝色巨人联系得太紧密。我的建议是使用
消息选择器。这将需要
JMSProducer
将消息类型设置为属性。消息选择器无法扫描有效负载,只能扫描标题和属性。感谢您的建议。选择器方法将使我能够查找消息的指定子集。这不行。如果我可以使用“收件箱”的类比,我需要在收件箱中填充发件人/日期/时间/主题(我可以从前100个字节获得),而不需要完整的消息。希望这能解释我想要实现的目标。我完全同意。然而,我正在努力使遗留系统性能更好,因此在重新设计方面,我的选择受到严重限制。至于您的问题:1)no 2)no 3)不确定Message Broker做了什么我试图完成的只是浏览大量巨大的消息,而不必为每个消息检索完整的消息缓冲区。我可以用低级的IBMMQAPI来实现这一点,我希望使用vanilla JMS也可以做到这一点?为什么不阅读整条信息,然后进行处理呢?您是否正在尝试确定应用程序是否应处理该消息?i、 e.队列中是否存在应用程序未处理的消息?i、 e.您对Q1说了“否”。队列包含XML文档,前100个左右字节包含足够的信息来填充“收件箱”,只有在用户选择他感兴趣的项目时,消息才会被消费/处理。我知道设计不是最优的,但我对消息生成器没有任何影响。您正在将邮件移动到另一个队列吗?如果没有,信息如何到达应用程序的收件箱?用户启动GUI,GUI代码浏览队列并填充收件箱,用户从收件箱中选择项目。然后从队列中使用所选项目。我知道设计很糟糕,不会很快改变。我试图找出是否有可能让JMS读取部分消息,以便“填充”逻辑不必浏览完整的消息。