我正在向主题发布JMS文本消息,而消费者可以使用消费者(MDB)发送文本消息。但是无法获取Message Object和String属性。它在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
Consumer是MessageDrivenBean
消费者可以获取文字或对象消息。但Message属性为null 。
@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使用者中的message属性为null。
答案 0 :(得分:1)
我找到了问题的根本原因。这是我的错。 TopicProxy的 targetClient 应为 JMS 。我错误地配置为MQ。所以我能得到消息而不是财产。
将targetClient值更改为JMS后。我能够得到消息和财产
答案 1 :(得分:0)
MessageProducer producer = session.createProducer(queue);
如果您要向主题发布消息,那么为什么要使用名为&#39; queue&#39;?的变量?主题字符串通常看起来像&test; / ABC / one&#39; (没有引号)。
其次,为什么你没有为消费者发布代码?更新原始帖子以包含消费者代码。