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