【发布时间】:2021-10-02 02:01:45
【问题描述】:
我需要将消息推送到发送一些标头属性的远程队列中。 在我这边,我使用的是 IBM MQ v9,我不能使用 MQRFH2,只能使用“本机”MQ 标头(我不确定是否可能)。 但是当我拉出消息时,我看不到任何属性。
import javax.jms.Destination;
import javax.jms.JMSContext;
import javax.jms.JMSException;
import javax.jms.JMSProducer;
import com.ibm.mq.jms.MQDestination;
import com.ibm.msg.client.jms.JmsConnectionFactory;
import com.ibm.msg.client.jms.JmsFactoryFactory;
import com.ibm.msg.client.wmq.WMQConstants;
public class MessageSender {
public void sendMessage() throws JMSException {
JMSContext context = createJMSContext();
JMSProducer producer = context.createProducer();
Destination destination = context.createQueue("queue:///" + queueName);
System.out.println("destination: " + destination);
MQDestination mqDestination = (MQDestination) destination;
// the header properties to be added
mqDestination.setStringProperty("KEY1", "VALUE1");
mqDestination.setStringProperty("KEY2", "VALUE2");
mqDestination.setStringProperty("KEY3", "VALUE3");
// WMQ_CLIENT_NONJMS_MQ - static final int WMQ_CLIENT_NONJMS_MQ
// WMQ_TARGET_CLIENT property value. Target is an MQ application (RFH2 will be excluded).
mqDestination.setTargetClient(WMQConstants.WMQ_CLIENT_NONJMS_MQ);
System.out.println("mqDestination: " + mqDestination);
String message = "mymessage";
producer.send(mqDestination, message);
}
private JMSContext createJMSContext() {
JMSContext context = null;
try {
JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
JmsConnectionFactory cf = ff.createConnectionFactory();
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, false);
cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, "hostname");
cf.setStringProperty(WMQConstants.WMQ_CHANNEL, "channel");
cf.setIntProperty(WMQConstants.WMQ_PORT, 1411);
cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, "queueManager");
context = cf.createContext();
} catch (JMSException e) {
e.printStackTrace();
}
return context;
}
}
【问题讨论】:
-
您使用什么技术/API 来尝试读取消费者端的属性?
-
您已经将 WMQ_CLIENT_NONJMS_MQ 设置为 TARGETCLIENT。这可确保您的应用程序发送的消息没有 RFH2 标头。你面临什么问题?
标签: java properties header ibm-mq