I see, thanks for the explanation.

The statically configured destination isn't really an option as the
queue names aren't known till runtime. Are there any other options
that might help get the messages forwarded irrespective of demand?

   ...ant

On Fri, Dec 11, 2009 at 12:40 PM, Gary Tully <gary.tu...@gmail.com> wrote:
> This is expected. A queue browser takes a shapshot of the queue through a
> short lived consumer. The network bridge is by default a demand forwarder,
> such that messages are only forwarded when there are consumers on other
> brokers.
>
> With the browser, the consumer (and hence demand) is transient, so it may
> take a snapshot before the forwarding has a chance to kick in. And the
> forwarding stops when the consumer goes away once the browse shapshot
> completes.
>
> One way to make this more deterministic would be to have a statically
> configured destination in the network connector configuration such that
> messages for that destination are forwarded irrespective of demand.
>
> 2009/12/11 ant elder <ant.el...@gmail.com>
>
>> I'm trying to track down an problem where a queue browser on a VM
>> connection to one AMQ broker is sometimes not seeing messages put on a
>> queue from a VM connection to another broker in the same network. The
>> code below can recreate the problem, running the put() on JVM and the
>> browse() on another JVM the first QueueBrowser never sees the message
>> but the second QueueBrowser does though sometimes it doesn't without
>> the Thread.sleep for a few seconds.
>>
>> Is there anything obviously wrong with this setup or are there any
>> config settings that could help?
>>
>>   ...ant
>>
>> The code to put a message on a queue:
>>
>>    public void put() throws Exception {
>>        BrokerService broker1 = new BrokerService();
>>        broker1.setBrokerName("default");
>>        broker1.setPersistent(false);
>>        broker1.setUseJmx(false);
>>        TransportConnector tc = broker1.addConnector("tcp://localhost:0");
>>        tc.setDiscoveryUri(URI.create("multicast://default"));
>>        broker1.addNetworkConnector("multicast://default");
>>        broker1.start();
>>
>>        Connection conn1 = new
>> ActiveMQConnectionFactory("vm://default?create=false").createConnection();
>>        conn1.start();
>>        Session sess1 = conn1.createSession(false, 1);
>>        Queue d1 = sess1.createQueue("d1");
>>        MessageProducer p1 = sess1.createProducer(d1);
>>        TextMessage m1 = sess1.createTextMessage("test");
>>        p1.send(m1);
>>   }
>>
>>
>> The code to browse the messages on the queue:
>>
>>    public void browse() throws Exception {
>>
>>        BrokerService broker2 = new BrokerService();
>>        broker2.setBrokerName("default");
>>        broker2.setPersistent(false);
>>        broker2.setUseJmx(false);
>>        TransportConnector tc = broker2.addConnector("tcp://localhost:0");
>>        tc.setDiscoveryUri(URI.create("multicast://default"));
>>        broker2.addNetworkConnector("multicast://default");
>>        broker2.start();
>>
>>        Connection conn2 = new
>> ActiveMQConnectionFactory("vm://default?create=false").createConnection();
>>        conn2.start();
>>        Session sess2 = conn2.createSession(false, 1);
>>        Queue d1 = sess2.createQueue("d1");
>>        QueueBrowser b = sess2.createBrowser(d1);
>>
>>        Enumeration x2 = b.getEnumeration();
>>        while (x2.hasMoreElements()) {
>>            System.out.println(x2.nextElement()); // this never gets
>> the message
>>        }
>>
>>        Thread.sleep(5000);
>>
>>        b = sess2.createBrowser(d1);
>>        Enumeration x2a = b.getEnumeration();
>>        while (x2a.hasMoreElements()) {
>>            System.out.println(x2a.nextElement()); // this does get the
>> message
>>        }
>>
>>    }
>>
>
>
>
> --
> http://blog.garytully.com
>
> Open Source Integration
> http://fusesource.com
>

Reply via email to