/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.broker.virtual;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.broker.BrokerService;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
import javax.jms.*;
import java.util.concurrent.CountDownLatch;
import static org.junit.Assert.assertEquals;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "virtual-topic-network-test.xml" })
public class MessageDestinationVirtualTopicTest {
private static final Logger LOG = LoggerFactory.getLogger(MessageDestinationVirtualTopicTest.class);
private SimpleMessageListener listener1;
private SimpleMessageListener listener2;
@Resource(name = "broker1")
private BrokerService broker1;
@Resource(name = "broker2")
private BrokerService broker2;
private MessageProducer producer;
private Session session1;
public void init() throws JMSException {
// Create connection on Broker B2
ConnectionFactory broker2ConnectionFactory = new ActiveMQConnectionFactory("tcp://localhost:62616");
Connection connection2 = broker2ConnectionFactory.createConnection();
connection2.start();
Session session2 = connection2.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue consumerDQueue = session2.createQueue("Consumer.D.VirtualTopic.T1");
// Bind listener on queue for consumer D
MessageConsumer consumer = session2.createConsumer(consumerDQueue);
listener2 = new SimpleMessageListener();
consumer.setMessageListener(listener2);
// Create connection on Broker B1
ConnectionFactory broker1ConnectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection1 = broker1ConnectionFactory.createConnection();
connection1.start();
session1 = connection1.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue consumerCQueue = session1.createQueue("Consumer.C.VirtualTopic.T1");
// Bind listener on queue for consumer D
MessageConsumer consumer1 = session1.createConsumer(consumerCQueue);
listener1 = new SimpleMessageListener();
consumer1.setMessageListener(listener1);
// Create producer for topic, on B1
Topic virtualTopicT1 = session1.createTopic("VirtualTopic.T1");
producer = session1.createProducer(virtualTopicT1);
}
@Test
public void testDestinationNames() throws Exception {
LOG.info("Started waiting for broker 1 and 2");
broker1.waitUntilStarted();
broker2.waitUntilStarted();
LOG.info("Broker 1 and 2 have started");
init();
// Create a monitor
CountDownLatch monitor = new CountDownLatch(2);
listener1.setCountDown(monitor);
listener2.setCountDown(monitor);
LOG.info("Sending message");
// Send a message on the topic
TextMessage message = session1.createTextMessage("Hello World !");
producer.send(message);
LOG.info("Waiting for message reception");
// Wait the two messages in the related queues
monitor.await();
// Get the message destinations
String lastJMSDestination2 = listener2.getLastJMSDestination();
System.err.println(lastJMSDestination2);
String lastJMSDestination1 = listener1.getLastJMSDestination();
System.err.println(lastJMSDestination1);
// The destination names
assertEquals("queue://Consumer.D.VirtualTopic.T1", lastJMSDestination2);
assertEquals("queue://Consumer.C.VirtualTopic.T1", lastJMSDestination1);
}
}