Отложенная доставка с ActiveMQ 5.3 и NMS - PullRequest
1 голос
/ 22 февраля 2011

Я пытаюсь использовать новую функцию отложенной доставки из NMS.

Атрибут schedulerSupport был установлен в файле конфигурации, и я использую следующий код, чтобы попытаться задержать доставку сообщенияпока не будет достигнута дата / время, выбранное пользователем.

Код (который, кажется, не работает в настоящее время) выглядит следующим образом:

var timeDelay = dateTimePicker.Value.Subtract(DateTime.Now).TotalMilliseconds;     
var message = topicPublisher.CreateTextMessage();
message.Properties["AMQ_SCHEDULED_DELAY"] = timeDelay;
message.Text = CM.ToXMLString();

topicPublisher.Send(message);

Можете ли вы указать, что может бытьневерно в этом примере?

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 07 марта 2011

Спасибо за вашу помощь с этим Тимом.Я нашел причину проблемы.Немного запоздалый ответ с моей стороны - мне пришлось сконцентрироваться на других областях работы, но мне сегодня удалось вернуться к этому.

Проблема в функции C # ".TotalMilliseconds" - она ​​возвращает дробную суммузначение .partial миллисекунд, из которого очевидно, что ActiveMQ не любит.

Теперь я конвертирую это значение в миллисекундах в целое число, отложенный обмен сообщениями работает как требуется.

Log ExcerptНиже:

2011-03-07 10:14:44,186 | DEBUG | quasar adding destination: topic://REDACTED | org.apache.activemq.broker.region.AbstractRegion | ActiveMQ Transport: tcp:///REDACTED:50161
2011-03-07 10:14:44,576 | DEBUG | Error occured while processing async command: ActiveMQTextMessage {commandId = 4, responseRequired = false, messageId = ID:HL003323-50159-634350896828327757-0:0:1:1:1, originalDestination = null, originalTransactionId = null, producerId = ID:HL003323-50159-634350896828327757-0:0:1:1, destination = topic://REDACTED, transactionId = null, expiration = 0, timestamp = 1299492884437, arrival = 0, brokerInTime = 0, brokerOutTime = 0, correlationId = null, replyTo = null, persistent = false, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = null, marshalledProperties = org.apache.activemq.util.ByteSequence@1ae0436, dataStructure = null, redeliveryCounter = 0, size = 0, properties = {targetModule=HL.Services.Blackbird.OrderManager, AMQ_SCHEDULED_DELAY=53564.4233}, readOnlyProperties = false, readOnlyBody = false, droppable = false, text = <?xml version="1.0" encoding="utf-16"?>
<Com...mandMessage>}, exception: java.lang.NullPointerException | org.apache.activemq.broker.TransportConnection.Service | ActiveMQ Transport: tcp:///REDACTED:50161
java.lang.NullPointerException
        at org.apache.activemq.broker.scheduler.SchedulerBroker.send(SchedulerBroker.java:179)
        at org.apache.activemq.broker.BrokerFilter.send(BrokerFilter.java:129)
        at org.apache.activemq.broker.CompositeDestinationBroker.send(CompositeDestinationBroker.java:96)
        at org.apache.activemq.broker.TransactionBroker.send(TransactionBroker.java:227)
        at org.apache.activemq.broker.BrokerFilter.send(BrokerFilter.java:129)
        at org.apache.activemq.broker.BrokerFilter.send(BrokerFilter.java:129)
        at org.apache.activemq.security.AuthorizationBroker.send(AuthorizationBroker.java:192)
        at org.apache.activemq.broker.MutableBrokerFilter.send(MutableBrokerFilter.java:135)
        at org.apache.activemq.broker.TransportConnection.processMessage(TransportConnection.java:462)
        at org.apache.activemq.command.ActiveMQMessage.visit(ActiveMQMessage.java:677)
        at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:311)
        at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:185)
        at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:69)
        at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113)
        at org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:228)
        at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
        at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:220)
        at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:202)
        at java.lang.Thread.run(Thread.java:595)
2011-03-07 10:14:44,577 | WARN  | Async error occurred: java.lang.NullPointerException | org.apache.activemq.broker.TransportConnection.Service | ActiveMQ Transport: tcp:///REDACTED:50161
java.lang.NullPointerException
        at org.apache.activemq.broker.scheduler.SchedulerBroker.send(SchedulerBroker.java:179)
        at org.apache.activemq.broker.BrokerFilter.send(BrokerFilter.java:129)
        at org.apache.activemq.broker.CompositeDestinationBroker.send(CompositeDestinationBroker.java:96)
        at org.apache.activemq.broker.TransactionBroker.send(TransactionBroker.java:227)
        at org.apache.activemq.broker.BrokerFilter.send(BrokerFilter.java:129)
        at org.apache.activemq.broker.BrokerFilter.send(BrokerFilter.java:129)
        at org.apache.activemq.security.AuthorizationBroker.send(AuthorizationBroker.java:192)
        at org.apache.activemq.broker.MutableBrokerFilter.send(MutableBrokerFilter.java:135)
        at org.apache.activemq.broker.TransportConnection.processMessage(TransportConnection.java:462)
        at org.apache.activemq.command.ActiveMQMessage.visit(ActiveMQMessage.java:677)
        at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:311)
        at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:185)
        at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:69)
        at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113)
        at org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:228)
        at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
        at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:220)
        at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:202)
        at java.lang.Thread.run(Thread.java:595)
2 голосов
/ 23 февраля 2011

Я не вижу ничего очевидного из предоставленного кода.

Вы можете попробовать включить ведение журнала в брокере, чтобы посмотреть, получает ли планировщик сообщение и правильные ли значения, что также подтвердитчто вы действительно включили поддержку планировщика.Вы также можете попробовать создать небольшую Java-программу, которая делает нечто похожее, чтобы определить, правильно ли работает клиент NMS.

Я полагаю, у вас работает потребитель и запущен его объект подключения?

С уважением Тим.

www.fusesource.com

...