Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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_Apache Camel_Jms_Ibm Mq - Fatal编程技术网

Java 在JMS中设置IBM MQ自定义属性不会';行不通

Java 在JMS中设置IBM MQ自定义属性不会';行不通,java,apache-camel,jms,ibm-mq,Java,Apache Camel,Jms,Ibm Mq,发送消息时尝试在JMS中设置IBM MQ自定义属性。它不起作用 我正在JMS/apachecamel中寻找与以下内容类似的内容 mQMessage.setStringProperty( "customProperty", "123" ); 尝试了以下3个选项: 1) exchange.getIn().setHeader( "customProperty", "123" ); 2) exchange.getIn().

发送消息时尝试在JMS中设置IBM MQ自定义属性。它不起作用

我正在JMS/apachecamel中寻找与以下内容类似的内容

mQMessage.setStringProperty( "customProperty", "123" );
尝试了以下3个选项:

1) exchange.getIn().setHeader( "customProperty", "123" );
2) exchange.getIn().setProperty( "customProperty", "123" );
3) mQQueueConnectionFactory.setStringProperty( "customProperty", "123" );
下面读取该属性的代码抛出错误,因为该属性似乎不存在。 mQMessage.getStringProperty(“messageGlobalSequenceNumber”)

引发以下错误:

com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2471'.
        at com.ibm.mq.MQMessage.getProperty(MQMessage.java:5694)
        at com.ibm.mq.MQMessage.getStringProperty(MQMessage.java:6949)
        at com.ibm.mq.MQMessage.getStringProperty(MQMessage.java:6925)
...

您确定要检索的属性确实存在于该消息中吗?因为2471的原因码(MQRC_PROPERTY_NOT_AVAILABLE)明确表示命名属性不存在

在JMS(用于IBM MQ)中创建消息属性的正确方法如下:

/**
 * Send a message to a queue.
 * @param session
 * @param myQ
 * @throws JMSException
 */
private void sendMsg(QueueSession session, Queue myQ) throws JMSException
{
   QueueSender sender = null;

   try
   {
      TextMessage msg = session.createTextMessage();
      msg.setText("This is a test message.");
      msg.setStringProperty("MyProp01", "somevalue");

      sender = session.createSender(myQ);
      sender.send(msg);
   }
   finally
   {
      try
      {
         if (sender != null)
            sender.close();
      }
      catch (Exception ex)
      {
         System.out.println("sender.close() : " + ex.getLocalizedMessage());
      }
   }
}
您是否使用MQ工具检查消息的属性值?我运行了上述代码,然后用检查了队列上的消息,下面是一个屏幕截图:

或显示命名属性(又称消息属性)的已打开选定消息的屏幕截图:


您确定要检索的属性确实存在于该消息中吗?因为2471的原因码(MQRC_PROPERTY_NOT_AVAILABLE)明确表示命名属性不存在

在JMS(用于IBM MQ)中创建消息属性的正确方法如下:

/**
 * Send a message to a queue.
 * @param session
 * @param myQ
 * @throws JMSException
 */
private void sendMsg(QueueSession session, Queue myQ) throws JMSException
{
   QueueSender sender = null;

   try
   {
      TextMessage msg = session.createTextMessage();
      msg.setText("This is a test message.");
      msg.setStringProperty("MyProp01", "somevalue");

      sender = session.createSender(myQ);
      sender.send(msg);
   }
   finally
   {
      try
      {
         if (sender != null)
            sender.close();
      }
      catch (Exception ex)
      {
         System.out.println("sender.close() : " + ex.getLocalizedMessage());
      }
   }
}
您是否使用MQ工具检查消息的属性值?我运行了上述代码,然后用检查了队列上的消息,下面是一个屏幕截图:

或显示命名属性(又称消息属性)的已打开选定消息的屏幕截图:


谢谢,我使用的是不带JNDI和MQ资源管理器的Apache camel JMS。在JMS中,它正在被设置,我可以在那里看到它,但当它到达MQ时,它就消失了。看到一些评论,我不得不使用驼峰jms头,而不是驼峰头。因此尝试设置jmsComponent.setAllowAdditionalHeaders(“customProp=12345”);这也没用,我已经没有办法尝试了。这篇文章说有一些属性,但我不知道消息在MQ队列中时有哪些属性?如果没有,那么您将TARGCLIENT设置为什么?请参阅targetClient被设置为1,当我设置为0时,我在MQHRF2 header中获得了头。但我不知道如何在MQMD头中设置它。试图设置jmsComponent.setDestinationResolver,但仍然没有成功。 });尝试在目标解析程序mqQueueSession.setBooleanProperty(WMQConstants.WMQ_MQMD_READ_ENABLED,true)中设置以下内容;mqQueueSession.setBooleanProperty(WMQ_MQMD_WRITE_ENABLED,true);mqQueueSession.setIntProperty(WMQConstants.WMQ_MQMD_MESSAGE_CONTEXT,WMQConstants.WMQ_MDCTX_SET_ALL_CONTEXT;mqQueueSession.setStringProperty(“customProp”,“abc”);返回mqQueueSession.createQueue(“队列://“+destinationName+”?targetClient=1”);@Anu最好编辑并向您的问题中添加类似的详细信息。谢谢,我正在使用没有JNDI和MQ Explorer的Apache camel JMS。从JMS中可以看到它正在被设置,但当它到达MQ时它就消失了。看到一些评论说我必须使用camel JMS头而不是camel头。因此尝试设置jmsComponent.setAllowAdditionalHeaders(“customProp=12345”);这也不起作用,我已经没有可尝试的选项了。这篇文章说有一些属性,但我无法确定消息在MQ队列中时有哪些消息属性?如果没有,那么您将targetClient设置为什么?请看targetClient设置为1,当我设置为0时,我在MQHRF2标头中获得了标头。但是我无法确定我了解了如何在MQMD头中设置它。尝试设置jmsComponent.setDestinationResolver,仍然没有成功。});尝试在目标解析程序mqQueueSession.setBooleanProperty(WMQConstants.WMQ_MQMD_READ_ENABLED,true)中设置以下内容;mqQueueSession.setBooleanProperty(WMQ_MQMD_WRITE_ENABLED,true);mqQueueSession.setIntProperty(WMQConstants.WMQ_MQMD_MESSAGE_CONTEXT,WMQConstants.WMQ_MDCTX_SET_ALL_CONTEXT;mqQueueSession.setStringProperty(“customProp”,“abc”);return mqueuesession.createQueue(“queue://“+destinationName+”?targetClient=1”)@Anu最好编辑并向您的问题添加类似的详细信息。