Как временно отключить слушателя сообщения

Тест производительности:

http://jsperf.com/array-clear-methods/3

a = []; // 37% slower
a.length = 0; // 89% slower
a.splice(0, a.length)  // 97% slower
while (a.length > 0) {
    a.pop();
} // Fastest

17
задан davidi 9 March 2009 в 10:29
поделиться

5 ответов

Что было бы, если Вы не возвращаетесь из onMessage() метод прослушивателя, пока Ваша система не готова обработать сообщения снова? Это будет препятствовать тому, чтобы JMS передал другое сообщение на том потребителе.

Это - асинхронный эквивалент не вызова receive() в синхронном случае.

нет никакой многопоточности для данной сессии JMS, таким образом, конвейер сообщений сохранен вплоть до onMessage() возвраты метода.

я не знаком с последствиями динамичного вызова setMessageListener(). javadoc говорит существует неопределенное поведение , если названо, "когда сообщения используются существующим слушателем или синхронизируют потребителя". Если Вы звоните из onMessage(), это кажется на удар того неопределенного случая.

существуют , запускаются / остановка методы на Уровне соединения, если это не является слишком крупномодульным для Вас.

15
ответ дан 30 November 2019 в 13:54
поделиться

Проблема, решенная обходным решением, заменяющим слушателя сообщения получением () цикл, но я все еще интересуюсь тем, как отключить слушателя сообщения и включить его вскоре снова.

4
ответ дан 30 November 2019 в 13:54
поделиться

Это смотрит на меня как сообщения, поставляются, но ничего не происходит с ними, потому что у Вас нет присоединенного слушателя. Это было некоторое время, так как я сделал что-нибудь с JMS, но разве Вы не хотите отправлять сообщение очереди устаревшего закона или чему-то, в то время как Вы фиксируете систему и затем кладете обратно сообщения на исходную очередь, как только Вы готовы к обработке снова?

0
ответ дан 30 November 2019 в 13:54
поделиться

На WebLogic можно настроить макс. повторения, ошибочная очередь для обработки сообщений, которые превышают макс. предел повторной попытки и другие параметры. Я не уверен первое, что пришло на ум, но Вы также могли бы быть в состоянии определить период ожидания. Все это доступно Вам в консоли администрирования. Я посмотрел бы на администратора для поставщика JMS, которого Вы имеете и видите, может ли он сделать что-то подобное.

0
ответ дан 30 November 2019 в 13:54
поделиться

В JBoss следующий код сделает свое дело:

   MBeanServer mbeanServer = MBeanServerLocator.locateJBoss();
    ObjectName objName = new ObjectName("jboss.j2ee:ear=MessageGateway.ear,jar=MessageGateway-EJB.jar,name=MessageSenderMDB,service=EJB3");
    JMSContainerInvokerMBean invoker = (JMSContainerInvokerMBean) MBeanProxy.get(JMSContainerInvokerMBean.class, objName, mbeanServer);

    invoker.stop(); //Stop MDB
    invoker.start(); //Start MDB
0
ответ дан 30 November 2019 в 13:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: