You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by xita-de <ph...@gmail.com> on 2014/04/20 17:21:35 UTC

Advisory Message not correct?

Hi everybody, 

I use AdvisoryMessage to listener subscriber join or leave. If my system is
having two subscribers. After that I run AdvisoryTest and I receive the
result.
Result: 
A consumer subscribed to a topic or queue: ConsumerInfo {commandId = 4,
consumerId = ID:QuangDe-PC-51000-1397993623150-1:1:1:1, destination =
topic://TOPIC2 }
A consumer subscribed to a topic or queue: ConsumerInfo {commandId = 4,
consumerId = ID:QuangDe-PC-54005-1398005456464-1:1:1:1, destination =
topic://TOPIC1}

Code: 
/public class AdvisoryTest {
	static MessageListener listener = new MessageListener() {
		@Override
		public void onMessage(Message message) {
			System.out.println("message: " + message);
			if (message instanceof ActiveMQMessage) {
				ActiveMQMessage activeMessage = (ActiveMQMessage) message;
				Object command = activeMessage.getDataStructure();
				if (command instanceof ConsumerInfo) {
				   System.out.println("A consumer subscribed to a topic or queue: " +
command );
				} else if (command instanceof RemoveInfo) {
					RemoveInfo removeInfo = (RemoveInfo) command;
					if (removeInfo.isConsumerRemove()) {
					 System.out.println("A consumer unsubscribed from a topic or
queue"+command);
					} else {
						System.out.println("RemoveInfo, a connection was closed: " + command);
					}
				} else if (command instanceof ConnectionInfo) {
					System.out.println("ConnectionInfo, a new connection was made: " +
command);
				} else {
					System.out.println("Unknown command: " + command);
				}
			}
		}
	};

	public static void main(String[] args) {
		try {
			// ActiveMQConnectionFactory connectionFactory = new
			// ActiveMQConnectionFactory(
			// "user", "password", ActiveMQConnection.DEFAULT_BROKER_URL);
			ActiveMQConnectionFactory connectionFactory = new
ActiveMQConnectionFactory("tcp://localhost:61616");
			Connection connection = connectionFactory.createConnection();
			Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
			connection.start();
			Destination consumerTopicAdvisoryDest =
session.createTopic("ActiveMQ.Advisory.Consumer.Topic.>");
			
			MessageConsumer consumerAdvisory =
session.createConsumer(consumerTopicAdvisoryDest);
			consumerAdvisory.setMessageListener(listener);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}/

But when I change the destination to Topic advisoryAll =
session.createTopic("ActiveMQ.Advisory.>"). I am understanding this topic
include all of advisory messages. But I receive the result not include
"consumer subscribed". 

ActiveMQMessage {commandId = 0, messageId =
ID:QuangDe-PC-49713-1397991439530-1:1:0:0:1, producerId =
ID:QuangDe-PC-49713-1397991439530-1:1:0:0, destination =
topic://ActiveMQ.Advisory.MasterBroker}

Although, topic "ActiveMQ.Advisory.>" still receive all event happend after
it start. I don't know why. Please help me if you know root cause

Thanks everybody!



--
View this message in context: http://activemq.2283324.n4.nabble.com/Advisory-Message-not-correct-tp4680421.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Re: Advisory Message not correct?

Posted by Gary Tully <ga...@gmail.com>.
that is the retroactive replay of messages for existing
consumers/connections implemented by the AdvisoryBroker.
The check looks for an exact match for each type of advisory.
you will still get advisories for new consumers like a normal topic subscriber.

On 20 April 2014 16:21, xita-de <ph...@gmail.com> wrote:
> Hi everybody,
>
> I use AdvisoryMessage to listener subscriber join or leave. If my system is
> having two subscribers. After that I run AdvisoryTest and I receive the
> result.
> Result:
> A consumer subscribed to a topic or queue: ConsumerInfo {commandId = 4,
> consumerId = ID:QuangDe-PC-51000-1397993623150-1:1:1:1, destination =
> topic://TOPIC2 }
> A consumer subscribed to a topic or queue: ConsumerInfo {commandId = 4,
> consumerId = ID:QuangDe-PC-54005-1398005456464-1:1:1:1, destination =
> topic://TOPIC1}
>
> Code:
> /public class AdvisoryTest {
>         static MessageListener listener = new MessageListener() {
>                 @Override
>                 public void onMessage(Message message) {
>                         System.out.println("message: " + message);
>                         if (message instanceof ActiveMQMessage) {
>                                 ActiveMQMessage activeMessage = (ActiveMQMessage) message;
>                                 Object command = activeMessage.getDataStructure();
>                                 if (command instanceof ConsumerInfo) {
>                                    System.out.println("A consumer subscribed to a topic or queue: " +
> command );
>                                 } else if (command instanceof RemoveInfo) {
>                                         RemoveInfo removeInfo = (RemoveInfo) command;
>                                         if (removeInfo.isConsumerRemove()) {
>                                          System.out.println("A consumer unsubscribed from a topic or
> queue"+command);
>                                         } else {
>                                                 System.out.println("RemoveInfo, a connection was closed: " + command);
>                                         }
>                                 } else if (command instanceof ConnectionInfo) {
>                                         System.out.println("ConnectionInfo, a new connection was made: " +
> command);
>                                 } else {
>                                         System.out.println("Unknown command: " + command);
>                                 }
>                         }
>                 }
>         };
>
>         public static void main(String[] args) {
>                 try {
>                         // ActiveMQConnectionFactory connectionFactory = new
>                         // ActiveMQConnectionFactory(
>                         // "user", "password", ActiveMQConnection.DEFAULT_BROKER_URL);
>                         ActiveMQConnectionFactory connectionFactory = new
> ActiveMQConnectionFactory("tcp://localhost:61616");
>                         Connection connection = connectionFactory.createConnection();
>                         Session session = connection.createSession(false,
> Session.AUTO_ACKNOWLEDGE);
>                         connection.start();
>                         Destination consumerTopicAdvisoryDest =
> session.createTopic("ActiveMQ.Advisory.Consumer.Topic.>");
>
>                         MessageConsumer consumerAdvisory =
> session.createConsumer(consumerTopicAdvisoryDest);
>                         consumerAdvisory.setMessageListener(listener);
>                 } catch (Exception ex) {
>                         ex.printStackTrace();
>                 }
>         }
> }/
>
> But when I change the destination to Topic advisoryAll =
> session.createTopic("ActiveMQ.Advisory.>"). I am understanding this topic
> include all of advisory messages. But I receive the result not include
> "consumer subscribed".
>
> ActiveMQMessage {commandId = 0, messageId =
> ID:QuangDe-PC-49713-1397991439530-1:1:0:0:1, producerId =
> ID:QuangDe-PC-49713-1397991439530-1:1:0:0, destination =
> topic://ActiveMQ.Advisory.MasterBroker}
>
> Although, topic "ActiveMQ.Advisory.>" still receive all event happend after
> it start. I don't know why. Please help me if you know root cause
>
> Thanks everybody!
>
>
>
> --
> View this message in context: http://activemq.2283324.n4.nabble.com/Advisory-Message-not-correct-tp4680421.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.



-- 
http://redhat.com
http://blog.garytully.com