【问题标题】:Listener for IBM MQIBM MQ 的侦听器
【发布时间】:2018-01-19 06:13:57
【问题描述】:

我正在尝试为 IBM MQ 队列创建一个侦听器,以便在使用本机 API 将消息放入队列时读取消息。

使用 Thread/TimerTask 每秒执行一次 GET 是否更好。

我需要使用 CCDT 、用户名和密码进行身份验证。

有没有可用的默认监听器? 使用下面的代码读取

MQMessage theMessage    = new MQMessage();
MQGetMessageOptions mqGetMessageOptions = new MQGetMessageOptions();

mqGetMessageOptions.options=MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_FIRST;
mqGetMessageOptions.matchOptions=MQC.MQMO_NONE;
mqGetMessageOptions.waitInterval=5000;
try{
        //read the message from queue          
queue.get(theMessage,mqGetMessageOptions);  
  mqGetMessageOptions.options = MQC.MQGMO_MSG_UNDER_CURSOR;

    queue.get(theMessage, mqGetMessageOptions);

【问题讨论】:

  • 您说您需要使用 CCDT 进行用户名和密码验证吗?这是什么验证?这是 MQ v8 或更高版本的本机连接身份验证,还是服务器端某种形式的安全出口?对 MQ v8 或更高版本进行身份验证的一种方法是使用 mqcred 出口,这就是您认为需要使用 CCDT 的原因吗?
  • 是的 queueManager = new MQQueueManager(qManager, chanTab);为了连接到队列管理器,我传递了 CCDT 文件
  • 我问了几个不同的问题,“Yeah”指的是什么?您是否确认队列管理器正在使用 MQ v8 和更高版本的连接身份验证?
  • CCDT 是否有一个使用 mqcred 的 CLNTCONN 通道和 mqcred 出口?
  • 我需要传递所有 3 个变量,用户名、密码和 CCDT 文件才能获得连接。 MQ 是 V8。我使用的 CCDT 没有配置客户端安全出口。并且 CHLAUTH 规则被配置为控制对 WebSphere MQ 队列管理器的访问。

标签: multithreading jms message-queue ibm-mq


【解决方案1】:

您的代码是浏览消息而不是使用它们(大不同)。

其次,您应该始终使用 MQC.MQGMO_FAIL_IF_QUIESCING 选项。 即

mqGetMessageOptions.options=MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_FIRST | MQC.MQGMO_FAIL_IF_QUIESCING;

第三,不要使用轮询来访问队列——你的线程/计时器想法。这是对资源的浪费。您已经为 MQGET 定义了 5 秒的等待间隔,如果不够长,则将其增加到更合理的值。

最后,你为什么用“JMS”标记这个问题。您的问题中没有与 JMS 相关的内容。

【讨论】:

  • 我们也可以使用 JMS 连接到 MQ。基本上我需要 MQ 监听器的解决方案。我已经有一个使用 API 的监听器,但它不接受 CDT 文件进行身份验证
  • 天啊!当然不是。 CCDT 文件包含连接信息,并且永远不应包含 UserId 和 Password。您在代码中设置了 UsertId 和 Password。对于 JMS,它位于 createQueueConnection() 方法中。
猜你喜欢
  • 2010-12-04
  • 2011-01-20
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多