DefaultMessageListenerContainer, сведения об очереди для прослушивания

Есть ли возможность узнать внутри метода onMessage, какую очередь прослушивает MessageListener?

Мой Spring-config (его часть):

<bean id="abstractMessageListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer" abstract="true">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="maxConcurrentConsumers" value="5"/>
    <property name="receiveTimeout" value="10000" />
</bean>

<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer" parent="abstractMessageListenerContainer">
    <property name="destinationName" value="MY.QUEUE" />
    <property name="messageListener" ref="myMessageListener" />
</bean>

<bean id="myMessageListener" class="my.package.structure.ListenerClass"></bean>

Мой класс слушателя:

public class ListenerClass implements MessageListener {


    public void onMessage(Message msg) {

    //where do I know from, on which queue the message has been written to?

    }

}

Есть ли какое-то нестандартное решение? Или какое-либо специальное решение для получения имени очереди/назначения?

Нужна ли очередь в последующей пакетной обработке...


person maxstreifeneder    schedule 18.09.2012    source источник


Ответы (1)


Легкий. по крайней мере в тривиальных случаях:

msg.getJMSDestination() предоставит вам пункт назначения в виде объекта javax.jms.Destination. Обычно .toString() возвращает что-то вроде: queue://MYQUEUENAME

Однако в некоторых реализациях JMS могут быть очереди с несколькими переходами, такие как статическая установка публикации/подписки в WebSphere MQ, когда вы можете записать свое сообщение в одну очередь, и оно будет перемещаться по маршруту, чтобы оказаться в совершенно другой очереди. Кроме того, у вас может быть случай ESB с логикой в ​​​​середине, которая маршрутизирует сообщение. В таких случаях вам нужно дважды подумать, прежде чем слишком полагаться на атрибут JMSDestination. В противном случае, вперед.

person Petter Nordlander    schedule 18.09.2012
comment
@Petter: Что, если бы мне понадобился весь экземпляр DefaultMessageListenerContainer? Вот ссылка на мою ситуацию, если вы можете stackoverflow .com/questions/43207792/ - person Radhwen; 05.04.2017