Свойство IBM MQ Message имеет значение null в MDB
Я публикую текстовое сообщение JMS в теме, и потребитель может потребителю ( MDB) текстовое сообщение. Но не удалось получить свойство Message Object и String. это ноль в стороне потребителя MDB. Я определил MDB в ejb-jar.xml в папке META-INF. я использую
TomEE plus 7.0.2 JMS 2.0 IBM MQ 8 JDK 1.8 Тема
Я привел ниже упомянутый официальный пример Томи. В примере они использовали tomee.xml, вместо этого я использовал resource.xml и не использовал web.xml
Потребитель - 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 свойство сообщения имеет значение null.
2 ответа
Я нашел основную причину проблемы. это моя ошибка. Целевым клиентом TopicProxy должен быть JMS. Я неправильно настроен как MQ. так что я смог получить сообщение, но не собственность.
После изменения значения targetClient на JMS. Я могу получить сообщение и собственность
MessageProducer продюсер = session.createProducer(очередь);
Если вы публикуете сообщение в теме, то почему вы используете переменную с именем "очередь"? Строка темы обычно выглядит как "test/ABC/one" (без кавычек).
Во-вторых, почему вы не опубликовали код для потребителя? Обновите исходную публикацию, включив в нее код потребителя.