IBM MQ 消息 属性 在 MDB 中为空
IBM MQ Message property is null in MDB
我正在向主题发布 JMS 文本消息,消费者能够使用 (MDB) 文本消息。但无法获取消息对象和字符串 属性。它在 MDB 消费者端为空。我在 META-INF 文件夹下的 ejb-jar.xml 中定义了 MDB。我正在使用
TomEE 加 7.0.2
JMS 2.0
IBM MQ 8
JDK 1.8
主题
我参考了下面提到的Tomee官方示例。例如,他们使用 tomee.xml 而我使用 resource.xml 并且不使用 web.xml
消费者是 MessageDrivenBean
消费者能够获得文本或对象消息。但是消息属性 为空。
@Resource(name = "qcf")
private ConnectionFactory connectionFactory;
@Resource(name = "wmq-javax.jms.Topic")
private Topic topic;
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(topic);
TextMessage message = session.createTextMessage();
message.setText("Test Message");
message.setObjectProperty("a","b");
message.setStringProperty("c","D");
connection.start();
producer.send(message);
session.close();
connection.close();
消费者
<ejb-jar id="ejb-jar_ID" version="3.1"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd">
<display-name>SampleTransactionMDB</display-name>
<enterprise-beans>
<message-driven>
<display-name>SampleTransactionMDB</display-name>
<ejb-name>SampleTransactionMDB</ejb-name>
<ejb-class>com.example.SampleTransactionMDB</ejb-class>
<transaction-type>Container</transaction-type>
<activation-config>
<activation-config-property>
<activation-config-property-name>destinationType</activation-config-property-name>
<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>destination</activation-config-property-name>
<activation-config-property-value>openejb:Resource/projectname/topicname</activation-config-property-value>
</activation-config-property>
</activation-config>
<activation-config-property>
<activation-config-property-name>useJNDI</activation-config-property-name>
<activation-config-property-value>true</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>HostName</activation-config-property-name>
<activation-config-property-value>x.x.x.x</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>Port</activation-config-property-name>
<activation-config-property-value>123</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>QueueManager</activation-config-property-name>
<activation-config-property-value>xxxxx</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>Channel</activation-config-property-name>
<activation-config-property-value>xxxx</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>TransportType</activation-config-property-name>
<activation-config-property-value>CLIENT</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>subscriptionName</activation-config-property-name>
<activation-config-property-value>xxxxxx</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>sharedSubscription</activation-config-property-name>
<activation-config-property-value>true</activation-config-property-value>
</activation-config-property>
</message-driven>
</enterprise-beans>
<assembly-descriptor>
</assembly-descriptor>
</ejb-jar>
告诉我为什么消息 属性 在 MDB 消费者中为空。
MessageProducer producer = session.createProducer(queue);
如果您要向主题发布消息,那么为什么要使用名为 'queue' 的变量?主题字符串通常类似于 'test/ABC/one'(无引号)。
其次,您为什么 post 消费者代码?更新您的原始 posting 以包含消费者代码。
我找到了问题的根本原因。这是我的错误。 TopicProxy 的 targetClient 应该是 JMS。我错误地配置为 MQ。所以我能够收到消息但没有 属性。
将 targetClient 值更改为 JMS 后。我可以收到消息 属性
我正在向主题发布 JMS 文本消息,消费者能够使用 (MDB) 文本消息。但无法获取消息对象和字符串 属性。它在 MDB 消费者端为空。我在 META-INF 文件夹下的 ejb-jar.xml 中定义了 MDB。我正在使用
TomEE 加 7.0.2 JMS 2.0 IBM MQ 8 JDK 1.8 主题
我参考了下面提到的Tomee官方示例。例如,他们使用 tomee.xml 而我使用 resource.xml 并且不使用 web.xml
消费者是 MessageDrivenBean
消费者能够获得文本或对象消息。但是消息属性 为空。
@Resource(name = "qcf")
private ConnectionFactory connectionFactory;
@Resource(name = "wmq-javax.jms.Topic")
private Topic topic;
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(topic);
TextMessage message = session.createTextMessage();
message.setText("Test Message");
message.setObjectProperty("a","b");
message.setStringProperty("c","D");
connection.start();
producer.send(message);
session.close();
connection.close();
消费者
<ejb-jar id="ejb-jar_ID" version="3.1"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd">
<display-name>SampleTransactionMDB</display-name>
<enterprise-beans>
<message-driven>
<display-name>SampleTransactionMDB</display-name>
<ejb-name>SampleTransactionMDB</ejb-name>
<ejb-class>com.example.SampleTransactionMDB</ejb-class>
<transaction-type>Container</transaction-type>
<activation-config>
<activation-config-property>
<activation-config-property-name>destinationType</activation-config-property-name>
<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>destination</activation-config-property-name>
<activation-config-property-value>openejb:Resource/projectname/topicname</activation-config-property-value>
</activation-config-property>
</activation-config>
<activation-config-property>
<activation-config-property-name>useJNDI</activation-config-property-name>
<activation-config-property-value>true</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>HostName</activation-config-property-name>
<activation-config-property-value>x.x.x.x</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>Port</activation-config-property-name>
<activation-config-property-value>123</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>QueueManager</activation-config-property-name>
<activation-config-property-value>xxxxx</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>Channel</activation-config-property-name>
<activation-config-property-value>xxxx</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>TransportType</activation-config-property-name>
<activation-config-property-value>CLIENT</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>subscriptionName</activation-config-property-name>
<activation-config-property-value>xxxxxx</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>sharedSubscription</activation-config-property-name>
<activation-config-property-value>true</activation-config-property-value>
</activation-config-property>
</message-driven>
</enterprise-beans>
<assembly-descriptor>
</assembly-descriptor>
</ejb-jar>
告诉我为什么消息 属性 在 MDB 消费者中为空。
MessageProducer producer = session.createProducer(queue);
如果您要向主题发布消息,那么为什么要使用名为 'queue' 的变量?主题字符串通常类似于 'test/ABC/one'(无引号)。
其次,您为什么 post 消费者代码?更新您的原始 posting 以包含消费者代码。
我找到了问题的根本原因。这是我的错误。 TopicProxy 的 targetClient 应该是 JMS。我错误地配置为 MQ。所以我能够收到消息但没有 属性。
将 targetClient 值更改为 JMS 后。我可以收到消息 属性