Tag: ibm mq

需要将标头添加到将发送到IBM MQ websphere的消息

我不确定如何将消息头添加到我们发送给IBM MQ websphere服务器的消息中。 下面是我尝试使用的代码,但我得到例外: 创建与服务器的连接 qMgr = new MQQueueManager(queueMgr, props); int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT | MQC.MQOO_INQUIRE; queue = qMgr.accessQueue(queueName, openOptions); message = new MQMessage(); 发送消息 public String sendMessage(){ MQPutMessageOptions pmo = new MQPutMessageOptions(); message.format = MQC.MQFMT_STRING; message.feedback = MQC.MQFB_NONE; message.messageType = MQC.MQMT_DATAGRAM; message.messageId = MQC.MQMI_NONE; message.correlationId = MQC.MQCI_NONE; message.writeString(sMsg); queue.put(message,pmo); } 我尝试使用以下代码添加Header ((TextMessage)message).setStringProperty(header_name,header_value); […]

在Windows上 – 我可以在哪里使用mqji.properties?

我的应用程序是一个独立的Java应用程序,客户可以下载,安装和运行。 它使用MQ与已经工作多年的主机进行通信。 我自己和客户都没有在他们的Windows机器上安装任何MQ; 我们包括并使用com.ibm.mq.jar来完成这项工作。 显然,MQ需要在类路径中使用mqji.properties文件来防止这种情况: Unable to load message catalog – mqji com.ibm.mq.MQException: Message catalog not found 所以我的问题是:我从哪里得到一个?

MQDestination覆盖记帐标记值

我试图在我的系统从入站队列收到的消息上设置会计令牌。 我使用以下设置此令牌。 msg.setObjectProperty(JmsConstants.JMS_IBM_MQMD_ACCOUNTINGTOKEN,value) 我在JmsSUpport类中也有以下属性 ((JmsDestination) dest).setBooleanProperty(WMQConstants.WMQ_MQMD_READ_ENABLED, true); ((JmsDestination) dest).setBooleanProperty(WMQConstants.WMQ_MQMD_WRITE_ENABLED, true); ((MQDestination) dest).setMQMDWriteEnabled(true); ((MQDestination) dest).setMQMDReadEnabled(true); ((MQDestination) dest).setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ); 由于出站队列是MQDestination,我必须设置上述属性。 现在我观察到我正在设置出站消息的值。 但是当另一个应用程序从MQ读取消息时,它具有Accounting Token的默认值。 这可能是因为MQ以这种方式配置来覆盖值吗? 或者是因为其他应用程序没有正确读取MQ消息? 或者我应该使用任何其他属性来启用会计令牌? 是因为我正在设置((MQDestination)dest).setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ); msg被剥夺了MQMD标头?

从远程服务器获取通道表文件

我正在尝试使用位于远程服务器中的ccdt文件设置ccdturl。 我尝试使用ftp设置ccdt url,但它没有用。 有谁知道在远程服务器中为ccdt文件设置url的正确方法是什么? 谢谢! 我试过了: String channelTablePath = “ftp://user@host:/path-to-ccdt-file”; Url url = new URL(channelTablePath ); connectionFactory.setCCDTURL(url); 我得到的错误是: Exception in thread “main” javax.jms.JMSException: JMSWMQ2020: Failed to connect to queue manager ‘*QQ’ with connection mode ‘Client’ and supplied CCDT URL ‘ftp://user@host:/path/ccdt.tab’, see linked exception for more information. JMS Error code: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed […]

IBM MQ消息侦听器

您有没有人知道如何使用IBM MQ创建消息监听器? 我知道如何使用JMS规范来完成它,但我不知道如何为IBM MQ做到这一点。 非常感谢任何链接或指针。

Spring Batch – 并非所有记录都是从MQ检索中处理的

我是Spring和Spring Batch的新手,如果你有任何问题,请随时提出任何澄清问题。 我看到Spring Batch的问题,我无法在我们的测试或本地环境中重新创建。 我们有一个日常工作,通过JMS连接到Websphere MQ并检索一组记录。 此作业使用开箱即用的JMS ItemReader。 我们实现了自己的ItemProcessor,但它除了记录之外没有做任何特殊的事情。 没有应该影响传入记录的filter或处理。 问题是,在MQ上的每日10,000多条记录中,只有大约700个左右(确切的数字每次不同)通常会记录在ItemProcessor中。 所有记录都已成功从队列中删除。 记录的记录数每次都不同,似乎没有模式。 通过将日志文件与MQ中的记录列表进行比较,我们可以看到一个看似随机的记录子集正在被我们的工作“处理”。 可能会拾取第一条记录,然后跳过50条记录,然后连续5条等等。每次作业运行时,模式都不同。 也没有记录exception。 在localhost中运行相同的应用程序并使用相同的数据集进行测试时,ItemProcessor将成功检索并记录所有10,000多条记录。 该作业在生产中运行20到40秒(也不是常数),但在测试和本地,它需要几分钟才能完成(这显然是有意义的,因为它处理了更多的记录)。 因此,这是解决问题的难题之一,因为我们无法重新创建它。 一个想法是实现我们自己的ItemReader并添加额外的日志记录,以便我们可以看到记录是否在读者之前或读者之后丢失 – 我们现在知道的是ItemProcessor只处理了一部分记录。 但即使这样也无法解决我们的问题,并且考虑到它甚至不是一个解决方案,它将在某种程度上及时实施。 还有其他人看过像这样的问题吗? 任何可能的想法或疑难解答建议将不胜感激。 以下是我们用于参考的一些jar版本号。 spring – 3.0.5.RELEASE Spring Integration – 2.0.3.RELEASE Spring Batch – 2.1.7.RELEASE 活动MQ – 5.4.2 Websphere MQ – 7.0.1 提前感谢您的意见。 编辑:每个请求,处理器的代码: public SMSReminderRow process(Message message) throws Exception { SMSReminderRow retVal […]

IBM MQ8.0 – AMQ9503通道协商失败

在客户端通道(SVRCONN)启用SSL时,从Java客户端连接到IBM MQ8.0时出现问题。 在通道上禁用SSL(SSLAUTH为OPTIONAL)时,流程正常。 客户端是带有JRE1.7的java。 MQ服务器版本是IBM MQ8.0 创建自签名证书并根据MQ设置引用正确交换。 javax.net.debug = ssl选项cofirms在日志中证书交换和SSL握手成功。 但是当java客户端代码试图获取MQManager对象时,抛出MQ Exception。 com.ibm.mq.MQException: MQJE001: Completion code ‘2’, reason ‘2059’ … caused by: com.ibm.jmqi.JmqiException: CC=2;RC=2059;AMQ9204: Connection to host ‘1.2.3.4(1414)’ rejected. [1=com.ibm.jmqi.JmqiException[CC=2;RC=2059;AMQ9503: Channel negotiation failed. [3=CHANNEL.SVRCONN.SSL]],3=1.2.3.4(1414), 5=RemoteConnection.analyseSegment] … caused by: com.ibm.jmqi.JmqiException: CC=2;RC=2059;AMQ9503: Channel negotiation failed. [3=CHANNEL.SVRCONN.SSL] 我已将客户端和MQ客户端通道(SVRCONN)中的TLS_RSA_WITH_AES_256_CBC_SHA256配置为cipherspec。 尝试使用其他密码,如TLS_RSA_WITH_AES_128_CBC_SHA,错误保持不变。 MQ server error log has AMQ9665: SSL connection closed […]

与Tomcat的WebSphere MQ连接池

Tomcat有一个内置的JDBC连接池,但遗憾的是没有内置的JMS连接池。 我们正在将遗留的Tomcat Web应用程序从WebSphere MQ V6迁移到7.不幸的是,WebSphere MQ 7中的连接池已被删除,如下所述: http : //www-01.ibm.com/support/docview.wss?uid = swg21665128 现在,如果我们只使用以下代码在Tomcat中配置MQ,我们担心会遇到麻烦: 我们担心的原因是在使用MQ 7时不会使用池化JMS提供程序。有关详细信息,另请参阅http://activemq.apache.org/jmstemplate-gotchas.html 我们看到的替代方案是: 1)Atomikos的使用 Atomikos有一个com.atomikos.jms.AtomikosConnectionFactoryBean,可以代替MQQueueConnectionFactory使用但是当我们不需要XA时,使用XA事务管理器是一个巨大的开销 2)使用Spring的CachingConnectionFactory 看起来是一个很好的解决方案,但不幸的是我们的遗留应用程序不使用Spring。 所以我们假设使用CachingConnectionFactory意味着相当多的努力。 3)使用Apache Commons Pool 看起来很有希望,但为JMS正确实现它需要一些良好的JMS知识 我们的问题: 是否有一个JMS提供程序可用于包装MQQueueConnectionFactory,它将汇集连接,会话,生产者和消费者? 有没有人成功实施我们上面概述的替代解决方案之一?

如何获取 – 禁止WebSphere MQ队列?

WebSphere MQ队列有一个属性可以禁止队列中的GET 。 要设置此属性,我发现了两种方法。 只需使用WebSphere MQ Explorer GUI设置该属性即可。 使用MQSC命令改变队列ALTER QLOCAL(TEST) GET(DISABLED) 。 有没有办法通过Java程序在WebSphere MQ队列上启用或禁用GET ?

MQJMS2013无效的安全认证

我正在尝试从IBM Websphere Application Server连接到IBM Websphere MQ Server。 我收到以下错误: MQJMS2013: invalid security authentication supplied for MQQueueManager 我的理解是,这是因为连接到MQ Manager时WAS的安全凭证无效。 我尝试过提供MQ管理密码的不同组合,例如 为MQ连接工厂提供J2C身份validation。 为队列提供MQ管理员用户名和密码。 提供空白用户名。 以上三者的组合。 另外,正如一些post中所提到的,我已经尝试将传输类型作为“绑定”以及QueueConnectionFactory的 “客户端” 。 请建议。