0
私はJMSプロデューサに2種類のメッセージ、つまりビジネスロジックとハートビートメッセージを送信しています。現在、どちらも同じレシーバーで処理されていますが、セレクターを使用して専用のクラスを用意しようとしています。私が持っている問題は、レシーバーにセレクターを追加するたびにメッセージの受信を停止することです。ここまで私がこれまで持っていたことがあります。簡単にするために、私は唯一のハートビート用のコードを追加しました:JMSListenerセレクタが動作しません
private void sendHeartBeat() {
this.buildTemplate().send(new HeartbeatMessageCreator(this.someId));
}
private JmsTemplate buildTemplate() {
if (this.cachedJmsTemplate == null) {
final ActiveMQTopic activeMQTopic = new ActiveMQTopic(this.topic);
this.cachedJmsTemplate = new JmsTemplate(this.config.getCachedConnectionFactory());
this.cachedJmsTemplate.setDefaultDestination(activeMQTopic);
this.cachedJmsTemplate.setPubSubDomain(true);
}
return this.cachedJmsTemplate;
}
HeartbeatMessageCreator:
class HeartbeatMessageCreator implements MessageCreator {
private final String someID;
HeartbeatMessageCreator(final String someID) {
this.someID = someID;
}
@Override
public Message createMessage(final Session session) throws JMSException {
final Serializable message = new ZHeartBeat(this.someID);
final Message jmsMessage = session.createObjectMessage(message);
jmsMessage.setJMSType(message.getClass().getName());
jmsMessage.setStringProperty("InternalMessageType", "HeartBeat"); // <-- Setting my separator here
return jmsMessage;
}
消費者は以下の通りである:
をメッセージを送信するには、私はこれを持っています
@Component
public class MyListener {
@JmsListener(destination = "${myTopic}", containerFactory = "myJmsContainer", selector = "InternalMessageType = 'HeartBeat'")
public final void onMessage(final Message message) {
...
}
}
この構成では、コンシューマはメッセージを受信することはありませんが、sele @ JmsListenerアノテーションのctor部分は、配信されます。私はここで何が間違っているのか分かりません。何か案が ?
...私のために正常に動作します。私の場合、問題を発見しました。プロデューサとコンシューマの間にコンポーネントがあり、メッセージを単に転送することになっていました。しかし、それが行われた方法は、メッセージのプロパティが最終的な宛先に到達していないことを意味しました。あなたの時間Thx。 –