【问题标题】:How to set Persistence to JMS client?如何将持久性设置为 JMS 客户端?
【发布时间】:2020-07-05 15:35:34
【问题描述】:

我使用使用 SSL 的安全通道通过 JMS 建立了与 Weblogic IBM Webpsphere MQ 的连接。 我在 Weblogic 上的应用程序收到了来自 MQ 的消息。 将答案发送到回复队列。 响应标头存在 MQMD,它填充 java.lang.在参数 Persistence JMS 中发送值“1”。其他系统需要在 Persistence 接收值“0”。如何将此参数设置为java? 我猜那个参数是javax.jms.deliverymode。但是不知道怎么设置。

无论如何,谢谢你的帮助。

【问题讨论】:

    标签: java jms weblogic ibm-mq


    【解决方案1】:

    JMS上对应的属性是传递模式(需要设置的Int参数)来设置Persistent和nonpersistent消息。

    详情可参考IBM的网址

    【讨论】:

    • 谢谢,但是如何在 JMS 上设置属性 - JMSDeliveryMode?此属性设置在哪里?
    • 创建要放置的消息时设置此属性。docs.oracle.com/javaee/6/api/javax/jms/…
    • 另一个注意事项:www-01.ibm.com/support/docview.wss?uid=swg21584622。只是在检查这个。您必须在 QueueSender 中设置才能反映该值。
    • 这就是问题所在。我的应用程序不构建标头 MQMD。标头构建 Weblogic 服务器。我的应用程序收到了没有 MQMD 的消息。 MQMD 由 java 与库 com.ibm.mq.jar 形成。我从 MQ 服务器获取的那个库。
    • 您也不需要创建 MQMD。我假设您在 Message 或 QueueSender 级别上进行操作。 JMS 交付模式在队列发送者级别设置
    【解决方案2】:

    你应该这样尝试:

    public String sendMessage(ConnectionFactory connectionFactory,
                          Destination destination,
                          Destination jmsReplyTo,
                          CorrelationType correlationType,
                          CallOptions<String> callOptions,
                          String rqUid,
                          JMSAbstract transport) throws JMSException {
    Connection connection = null;
    Session session = null;
    MessageProducer producer = null;
    
    try {
    
        connection = connectionFactory.createConnection();
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    
        producer = session.createProducer(destination);
    
        // Set JMS DeliverMode (1/2)
        producer.setDeliveryMode(1);
    
        // create message
        Message message = createTextMessage(session, jmsReplyTo, correlationType, callOptions, rqUid, transport);
    
        // send message
        producer.send(message);
    
        return correlationType.getCorrelationId(message);
    
        } finally {
            closeResource(connection, session, null, producer, rqUid);
        }
    }
    

    这只是一个 java 示例。您还可以在 IBM WebSphere 的队列配置中设置持久性标志。我的意思是 MQQueue 有方法 setPersistence。如果您在项目中使用 IBM Java 对象,则可以通过调用该方法来设置持久性:

    MQQueue mqQueue = new MQQueue("QueueName");
    mqQueue.setPersistence(1);
    

    【讨论】:

      【解决方案3】:

      I 0x5a4d 的答案还可以,但最好像 IBM 最佳实践一样使用它

      //Persistentmode = 1 
      producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
      //Persistentmode = 2 
      producer.setDeliveryMode(DeliveryMode.PERSISTENT);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-30
        • 2017-01-15
        • 2015-04-04
        • 2012-08-11
        • 1970-01-01
        • 1970-01-01
        • 2021-01-20
        相关资源
        最近更新 更多