this is the code that does the sending. I've just watched a batch of three messages being sent, two simply disappeared.
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL); connection = connectionFactory.createConnection(); connection.setClientID(clientId); connection.start(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); destination = session.createTopic(topicName); producer = session.createProducer(destination); producer.setDeliveryMode(messageMode); TextMessage message = session.createTextMessage(messageText); producer.send(message); I tried to create a simple test but the embedded broker never calls isAllowedToConsume Alistair -- mov eax,1 mov ebx,0 int 80h On 27 Sep 2011, at 11:36, Alistair Young wrote: > the topic consumers don't need to be present when the message is sent as the > messages are persistent and they are durable topic subscribers. They are > never persisted by activemq. They just disappear. I can't track the messages > through the system as isAllowedToConsume is never called for the original > message. It's only called when camel reroutes the message and camel never > sees the missing messages, as verified by org.apache.camel.Processor > instances. > > Alistair > > > -- > mov eax,1 > mov ebx,0 > int 80h > > > > > On 27 Sep 2011, at 11:25, Gary Tully wrote: > >> please provide some code that demonstrates your problem. Are you sure >> that the topic consumers are present when the messages are sent? >> Try and reduce the complexity of your usecase, the bottom line is that >> messages won't just disappear without good reason, there are hundreds >> of test cases that verify this is the case. >> >> >> On 27 September 2011 11:16, Alistair Young <alistair.yo...@uhi.ac.uk> wrote: >>> not a lot seems to work. 8 identical messages sent to the broker in quick >>> succession. Three arrived, 5 just disappeared. It's complicated by the fact >>> MessageAuthorizationPolicy::isAllowedToConsume never seems to be called for >>> the original message, so I can't really verify whether the message >>> disappeared once inside activemq. isAllowedToConsume is only called when >>> the message is routed by camel to the next topic: >>> >>> message -> topicA -> camel -> topicB >>> >>> isAllowedToConsume is never called for topicA >>> isAllowedToConsume is called for topicB with a destination of topic://topicB >>> >>> Alistair >>> >>> -- >>> mov eax,1 >>> mov ebx,0 >>> int 80h >>> >>> >>> >>> >>> On 26 Sep 2011, at 16:19, Alistair Young wrote: >>> >>>> trying to log incoming messages at the broker to narrow the problem and >>>> another problem appears. This works on one server but adds 0x0 chars on >>>> another so the message fails to parse: >>>> >>>> public boolean isAllowedToConsume(ConnectionContext context, Message >>>> message) { >>>> >>>> new String(message.getContent().data, message.getContent().offset, >>>> message.getContent().length) >>>> >>>> so on one server the offset and length are wrong as it seems to report too >>>> many chars >>>> >>>> Alistair >>>> >>>> -- >>>> mov eax,1 >>>> mov ebx,0 >>>> int 80h >>>> >>>> >>>> >>>> >>>> On 22 Sep 2011, at 12:05, Gary Tully wrote: >>>> >>>>> Is this code shared by multiple threads? does it need synchronization? >>>>> >>>>> What you are experiencing does seem odd, it would be great if you >>>>> could provide a simple junit test case that can reproduce. >>>>> >>>>> Also, peeking that the code of the logging plugin, it should be >>>>> logging sends, that is again odd: >>>>> http://svn.apache.org/viewvc/activemq/tags/activemq-5.5.0/activemq-core/src/main/java/org/apache/activemq/broker/util/LoggingBrokerPlugin.java?view=markup >>>>> >>>>> On 22 September 2011 10:59, Alistair Young <alistair.yo...@uhi.ac.uk> >>>>> wrote: >>>>>> would someone be kind enough to have a quick look at this code to see if >>>>>> it could cause problems? The method returns a reusable connection so the >>>>>> user of the class doesn't have to connect/disconnect on every message. >>>>>> The first message never fails, it's always when reusing the connection >>>>>> that random messages disappear. >>>>>> >>>>>> thanks, >>>>>> >>>>>> Alistair >>>>>> >>>>>> try { >>>>>> // Try to reuse a previous connection >>>>>> if (previousMxConnection == null) { >>>>>> ActiveMQConnectionFactory connectionFactory = new >>>>>> ActiveMQConnectionFactory(brokerURL); >>>>>> connection = connectionFactory.createConnection(); >>>>>> connection.setClientID(clientId); >>>>>> connection.start(); >>>>>> session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); >>>>>> destination = session.createTopic(topicName); >>>>>> producer = session.createProducer(destination); >>>>>> producer.setDeliveryMode(messageMode); >>>>>> >>>>>> mxConnection = new MatrixConnection(); >>>>>> mxConnection.connection = connection; >>>>>> mxConnection.session = session; >>>>>> mxConnection.destination = destination; >>>>>> mxConnection.producer = producer; >>>>>> } >>>>>> else { >>>>>> session = previousMxConnection.session; >>>>>> if (previousMxConnection.producer == null) { >>>>>> producer = >>>>>> session.createProducer(previousMxConnection.destination); >>>>>> producer.setDeliveryMode(DeliveryMode.PERSISTENT); >>>>>> previousMxConnection.producer = producer; >>>>>> } >>>>>> else { >>>>>> producer = previousMxConnection.producer; >>>>>> } >>>>>> mxConnection = previousMxConnection; >>>>>> } >>>>>> >>>>>> TextMessage message = session.createTextMessage(messageText); >>>>>> producer.send(message); >>>>>> >>>>>> return mxConnection; >>>>>> } >>>>>> catch(Exception e) { >>>>>> throw new MatrixClientException(e); >>>>>> } >>>>>> } >>>>>> >>>>>> >>>>>> -- >>>>>> mov eax,1 >>>>>> mov ebx,0 >>>>>> int 80h >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On 22 Sep 2011, at 10:50, Alistair Young wrote: >>>>>> >>>>>>> nothing seems to help. There are still messages just disappearing. Also >>>>>>> the logging doesn't seem to log anything to do with producers: >>>>>>> >>>>>>> <loggingBrokerPlugin logAll="true" logConnectionEvents="true" /> >>>>>>> >>>>>>> I can see lots of camel consumers from the local machine looking at the >>>>>>> routes but nothing about incoming messages from producers. >>>>>>> >>>>>>> Alistair >>>>>>> >>>>>>> -- >>>>>>> mov eax,1 >>>>>>> mov ebx,0 >>>>>>> int 80h >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On 21 Sep 2011, at 13:13, Alistair Young wrote: >>>>>>> >>>>>>>> I'm running ActiveMQ 5.5.0 as a spring webapp rather than the >>>>>>>> standalone version. Would you recommend the standalone one? Not sure >>>>>>>> how to use camel with that though. >>>>>>>> >>>>>>>> there's quite a high rate of packet loss on the network it seems and >>>>>>>> according to this: >>>>>>>> http://activemq.apache.org/async-sends.html >>>>>>>> the default is sync send for persistent messages outside transactions. >>>>>>>> I'm using transactions on the broker but not the producer to preserve >>>>>>>> camel routes across restarts. So I presume the producer is using sync >>>>>>>> mode to send the messages as they are persistent. However, no error >>>>>>>> from the broker and no message arriving might hint at async mode >>>>>>>> falling foul of packet loss perhaps? >>>>>>>> >>>>>>>> I'll try this on the broker connection to see if it helps: >>>>>>>> >>>>>>>> jms.useAsyncSend=false >>>>>>>> >>>>>>>> Alistair >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> mov eax,1 >>>>>>>> mov ebx,0 >>>>>>>> int 80h >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On 21 Sep 2011, at 13:02, Torsten Mielke wrote: >>>>>>>> >>>>>>>>> What is the exact broker version used on your side? >>>>>>>>> In case its not the latest released version, can you try the latest >>>>>>>>> version? >>>>>>>>> >>>>>>>>> Do you set any particular headers on the Topic message in your >>>>>>>>> producer? >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Sep 21, 2011, at 1:54 PM, Alistair Young wrote: >>>>>>>>> >>>>>>>>>> I can't explain this at all. It's almost like the opposite of >>>>>>>>>> reliable messaging. At times, almost 1 in 3 messages just >>>>>>>>>> disappears. No errors. The KahaDB/db-*.log show no record of the >>>>>>>>>> message every arriving and yet the producer doesn't get an error. >>>>>>>>>> >>>>>>>>>> Alistair >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> mov eax,1 >>>>>>>>>> mov ebx,0 >>>>>>>>>> int 80h >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> http://fusesource.com >>>>> http://blog.garytully.com >>>> >>> >>> >> >> >> >> -- >> http://fusesource.com >> http://blog.garytully.com >