Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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 MQ JMS消息ID不返回任何文本消息以及如何以正确格式写入MQ JMSCOrrationID_Java_Jms_Ibm Mq - Fatal编程技术网

Java MQ JMS消息ID不返回任何文本消息以及如何以正确格式写入MQ JMSCOrrationID

Java MQ JMS消息ID不返回任何文本消息以及如何以正确格式写入MQ JMSCOrrationID,java,jms,ibm-mq,Java,Jms,Ibm Mq,我测试了一个独立的JMS客户机,它将TextMessage传递到IBM MQ上的队列,得到了以下消息id,但有错误: ID:414D5120424357303241314202020205BC6BD3E25423865 java.lang.RuntimeException:没有文本消息 我用发送了一条TextMessage,这是为了测试,但为什么我没有收到TextMessage?在此代码运行之前,队列中没有其他消息 如果文本消息成功,如何在Java中以可读格式读取消息Id(发送请求消息Id和回复

我测试了一个独立的JMS客户机,它将
TextMessage
传递到IBM MQ上的队列,得到了以下消息id,但有错误:

ID:414D5120424357303241314202020205BC6BD3E25423865

java.lang.RuntimeException:没有文本消息

  • 我用
    发送了一条
    TextMessage
    ,这是为了测试
    ,但为什么我没有收到
    TextMessage
    ?在此代码运行之前,队列中没有其他消息
  • 如果文本消息成功,如何在Java中以可读格式读取消息Id(发送请求消息Id和回复消息Id)。是我需要在下面的代码中更改的任何东西

  • 在您的请求-应答用例中,请求客户端发送的消息类型与它将接收的消息类型没有直接关系。请求客户端接收的消息类型取决于响应客户端发送的消息


    至于从IBM MQ实现中以字符串形式获取消息ID,您可以参考。

    在您的请求-应答用例中,请求客户端发送的消息类型与它将接收的消息类型没有直接关系。请求客户端接收的消息类型取决于响应客户端发送的消息


    至于从IBM MQ实现中以
    字符串
    形式获取消息ID,您可以参考。

    这是否仅仅是因为您的消息正在从队列中过期

    我看到您将消息过期时间设置为2秒。许多应答应用程序将剩余的到期值复制到应答消息中。因此,如果读取请求并向您发送回复的应用程序在发送请求后的2秒内没有读取您的请求,或者如果读取请求并在剩余到期日内进行回复,并且回复没有返回给您使用,则该应用程序将从队列中消失

    尝试将到期时间增加到更高的值


    还请注意,您通过两种不同的方法设置相同的到期值,一种是生产者发送的所有消息的默认值,另一种是每消息设置

    这将为生产者发送的所有邮件设置默认到期日期:

    queueSender.setTimeToLive(2*1000);
    
    这将设置您发送的特定邮件的到期日,并将覆盖
    队列发送者.setTimeToLive
    ,因此您只需要其中一行

    textMessage.setJMSExpiration(2*1000);//message expiration
    

    这可能仅仅是因为您的消息正在从队列中过期吗

    我看到您将消息过期时间设置为2秒。许多应答应用程序将剩余的到期值复制到应答消息中。因此,如果读取请求并向您发送回复的应用程序在发送请求后的2秒内没有读取您的请求,或者如果读取请求并在剩余到期日内进行回复,并且回复没有返回给您使用,则该应用程序将从队列中消失

    尝试将到期时间增加到更高的值


    还请注意,您通过两种不同的方法设置相同的到期值,一种是生产者发送的所有消息的默认值,另一种是每消息设置

    这将为生产者发送的所有邮件设置默认到期日期:

    queueSender.setTimeToLive(2*1000);
    
    这将设置您发送的特定邮件的到期日,并将覆盖
    队列发送者.setTimeToLive
    ,因此您只需要其中一行

    textMessage.setJMSExpiration(2*1000);//message expiration
    

    您的会话是事务性的吗?
    如果是,则在事务为“提交”之前,您的消息在队列上不“可见”,并且您从不
    commit

    我很想知道当你测试它的类时,
    消息的内容是什么。它是空的吗?
    receive
    是立即返回还是仅在超时过期后返回(在您的情况下为60*1000ms)?

    Denis

    您的会话是事务性的吗?
    如果是,则在事务为“提交”之前,您的消息在队列上不“可见”,并且您从不
    commit

    我很想知道当你测试它的类时,
    消息的内容是什么。它是空的吗?
    receive
    是立即返回还是仅在超时过期后返回(在您的情况下为60*1000ms)?

    Denis

    哪个代理服务?Receive call已返回。意味着它找到了一条消息。发送消息之前,您确定队列中没有其他消息吗?有关messageid,请参阅以下链接:IBM MQ broker service是发送消息之前队列中没有其他消息哪个broker service?Receive调用已返回。意味着它找到了一条消息。发送消息之前,您确定队列中没有其他消息吗?有关messageid,请参阅以下链接:IBM MQ broker Service是发送消息之前队列中没有其他消息消息消息消息会立即返回,我怀疑他们是否希望消息采用某种格式,如果该格式不存在,他们将无法发送消息来自数据库的消息数据,并传递我在代码queueConnection.createQueueSession中写入的数据(false,Session.AUTO_ACKNOWLEDGE);这意味着非事务性正确,请纠正我,因此在我的情况下,我需要事务性还是非事务性,如果事务性我需要更改以下代码queueConn.createQueueSession(true,Session.DUPS\u OK\u ACKNOWLEDGE);然后到queueSession.commit();如果Transact字段为true,则第二个字段无关紧要,它将被忽略,仅当Transact字段为false时才适用。在第二个字段中有一个特殊的值
    Session.transact
    ,您可以使用它来指示会话已被事务处理,但这只是一个占位符,除了将transact设置为true之外,它什么也不做。@谢谢。如果我设置(true,Session.transact)我是否需要queuesession.commit更正我是的,任何时候进行事务处理都需要提交。消息会立即返回,我怀疑他们是否希望消息采用某种格式,如果该格式不存在,他们就不会发送正确的消息。请阅读消息数据