Search in sources :

Example 1 with MessageConsumerBuilder

use of com.navercorp.pinpoint.plugin.activemq.client.util.MessageConsumerBuilder in project pinpoint by naver.

the class ActiveMQClientITBase method testTopicPull.

@Test
public void testTopicPull() throws Exception {
    // Given
    final String testTopicName = "TestPullTopic";
    final ActiveMQTopic testTopic = new ActiveMQTopic(testTopicName);
    final String testMessage = "Hello World for Topic!";
    final CountDownLatch consumerLatch = new CountDownLatch(2);
    final AtomicReference<Exception> exception = new AtomicReference<>();
    // create producer
    final ActiveMQSession producerSession = ActiveMQClientITHelper.createSession(getProducerBrokerName(), getProducerBrokerUrl());
    final MessageProducer producer = new MessageProducerBuilder(producerSession, testTopic).waitTillStarted().build();
    final TextMessage expectedTextMessage = producerSession.createTextMessage(testMessage);
    // create 2 consumers
    final ActiveMQSession consumer1Session = ActiveMQClientITHelper.createSession(getConsumerBrokerName(), getConsumerBrokerUrl());
    final MessageConsumer consumer1 = new MessageConsumerBuilder(consumer1Session, testTopic).waitTillStarted().build();
    final MessageReceiver messageReceiver1 = new MessageReceiver(consumer1);
    final Thread consumer1Thread = new Thread(new Runnable() {

        @Override
        public void run() {
            try {
                messageReceiver1.receiveMessage(1000L);
            } catch (Exception e) {
                exception.set(e);
            } finally {
                consumerLatch.countDown();
            }
        }
    });
    final ActiveMQSession consumer2Session = ActiveMQClientITHelper.createSession(getConsumerBrokerName(), getConsumerBrokerUrl());
    final MessageConsumer consumer2 = new MessageConsumerBuilder(consumer2Session, testTopic).waitTillStarted().build();
    final MessageReceiver messageReceiver2 = new MessageReceiver(consumer2);
    final Thread consumer2Thread = new Thread(new Runnable() {

        @Override
        public void run() {
            try {
                messageReceiver2.receiveMessage(1000L);
            } catch (Exception e) {
                exception.set(e);
            } finally {
                consumerLatch.countDown();
            }
        }
    });
    // When
    producer.send(expectedTextMessage);
    consumer1Thread.start();
    consumer2Thread.start();
    consumerLatch.await(1L, TimeUnit.SECONDS);
    // Then
    assertNoConsumerError(exception.get());
    PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
    verifier.printCache();
    // Wait till all traces are recorded (consumer traces are recorded from another thread)
    verifier.awaitTraceCount(13, 100, 5000);
    verifier.verifyTraceCount(13);
    verifyProducerSendEvent(verifier, testTopic, producerSession);
    verifyConsumerConsumeEvent(verifier, testTopic, consumer1Session);
    verifyConsumerConsumeEvent(verifier, testTopic, consumer2Session);
    // Separate transaction for the consumer's request to receive the message
    Method receiveMessageMethod = MessageReceiver.class.getDeclaredMethod("receiveMessage", long.class);
    Method receiveMethod = ActiveMQMessageConsumer.class.getDeclaredMethod("receive", long.class);
    Method printMessageMethod = MessagePrinter.class.getDeclaredMethod("printMessage", Message.class);
    for (int i = 0; i < 2; ++i) {
        verifier.verifyDiscreteTrace(root(ServiceType.STAND_ALONE.getName(), "Entry Point Process", null, null, null, null), event(ServiceType.INTERNAL_METHOD.getName(), receiveMessageMethod), event(ACTIVEMQ_CLIENT_INTERNAL, receiveMethod, annotation("activemq.message", getMessageAsString(expectedTextMessage))), event(ServiceType.INTERNAL_METHOD.getName(), printMessageMethod));
    }
    verifier.verifyTraceCount(0);
}
Also used : ActiveMQMessageConsumer(org.apache.activemq.ActiveMQMessageConsumer) MessageConsumer(javax.jms.MessageConsumer) ActiveMQTopic(org.apache.activemq.command.ActiveMQTopic) MessageConsumerBuilder(com.navercorp.pinpoint.plugin.activemq.client.util.MessageConsumerBuilder) AtomicReference(java.util.concurrent.atomic.AtomicReference) Method(java.lang.reflect.Method) CountDownLatch(java.util.concurrent.CountDownLatch) PluginTestVerifier(com.navercorp.pinpoint.bootstrap.plugin.test.PluginTestVerifier) JMSException(javax.jms.JMSException) MessageProducerBuilder(com.navercorp.pinpoint.plugin.activemq.client.util.MessageProducerBuilder) ActiveMQSession(org.apache.activemq.ActiveMQSession) MessageReceiver(com.navercorp.test.pinpoint.plugin.activemq.MessageReceiver) PollingMessageReceiver(com.navercorp.test.pinpoint.plugin.activemq.PollingMessageReceiver) MessageProducer(javax.jms.MessageProducer) TextMessage(javax.jms.TextMessage) Test(org.junit.Test)

Example 2 with MessageConsumerBuilder

use of com.navercorp.pinpoint.plugin.activemq.client.util.MessageConsumerBuilder in project pinpoint by naver.

the class ActiveMQClientITBase method testTopicPoll.

@Test
public void testTopicPoll() throws Exception {
    // Given
    final String testTopicName = "TestPollTopic";
    final ActiveMQTopic testTopic = new ActiveMQTopic(testTopicName);
    final String testMessage = "Hello World for Topic!";
    // create producer
    final ActiveMQSession producerSession = ActiveMQClientITHelper.createSession(getProducerBrokerName(), getProducerBrokerUrl());
    final MessageProducer producer = new MessageProducerBuilder(producerSession, testTopic).waitTillStarted().build();
    final TextMessage expectedTextMessage = producerSession.createTextMessage(testMessage);
    // create 2 consumers
    final ActiveMQSession consumer1Session = ActiveMQClientITHelper.createSession(getConsumerBrokerName(), getConsumerBrokerUrl());
    final MessageConsumer consumer1 = new MessageConsumerBuilder(consumer1Session, testTopic).waitTillStarted().build();
    final MessageReceiveHandler messageReceiveHandler1 = new MessageReceiveHandler();
    final PollingMessageReceiver pollingMessageReceiver1 = new PollingMessageReceiver(consumer1, messageReceiveHandler1);
    final ActiveMQSession consumer2Session = ActiveMQClientITHelper.createSession(getConsumerBrokerName(), getConsumerBrokerUrl());
    final MessageConsumer consumer2 = new MessageConsumerBuilder(consumer2Session, testTopic).waitTillStarted().build();
    final MessageReceiveHandler messageReceiveHandler2 = new MessageReceiveHandler();
    final PollingMessageReceiver pollingMessageReceiver2 = new PollingMessageReceiver(consumer2, messageReceiveHandler2);
    // When
    pollingMessageReceiver1.start();
    pollingMessageReceiver2.start();
    producer.send(expectedTextMessage);
    messageReceiveHandler1.await(5000L);
    messageReceiveHandler2.await(5000L);
    pollingMessageReceiver1.stop();
    pollingMessageReceiver2.stop();
    // Then
    assertNoConsumerError(pollingMessageReceiver1.getException());
    assertNoConsumerError(pollingMessageReceiver2.getException());
    PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
    verifier.printCache();
    // Wait till all traces are recorded (consumer traces are recorded from another thread)
    verifier.awaitTraceCount(11, 100, 5000);
    verifier.verifyTraceCount(11);
    verifyProducerSendEvent(verifier, testTopic, producerSession);
    verifyConsumerConsumeEvent(verifier, testTopic, consumer1Session);
    verifyConsumerConsumeEvent(verifier, testTopic, consumer2Session);
    ExpectedTrace asyncTrace = event(ServiceType.ASYNC.getName(), "Asynchronous Invocation");
    Method handleMessageMethod = MessageReceiveHandler.class.getDeclaredMethod("handleMessage", Message.class);
    ExpectedTrace handleMessageTrace = event(ServiceType.INTERNAL_METHOD.getName(), handleMessageMethod);
    Method printMessageMethod = MessagePrinter.class.getDeclaredMethod("printMessage", Message.class);
    ExpectedTrace printMessageTrace = event(ServiceType.INTERNAL_METHOD.getName(), printMessageMethod);
    for (int i = 0; i < 2; ++i) {
        verifier.verifyDiscreteTrace(asyncTrace, handleMessageTrace, printMessageTrace);
    }
    verifier.verifyTraceCount(0);
}
Also used : ExpectedTrace(com.navercorp.pinpoint.bootstrap.plugin.test.ExpectedTrace) ActiveMQMessageConsumer(org.apache.activemq.ActiveMQMessageConsumer) MessageConsumer(javax.jms.MessageConsumer) ActiveMQTopic(org.apache.activemq.command.ActiveMQTopic) MessageConsumerBuilder(com.navercorp.pinpoint.plugin.activemq.client.util.MessageConsumerBuilder) Method(java.lang.reflect.Method) PluginTestVerifier(com.navercorp.pinpoint.bootstrap.plugin.test.PluginTestVerifier) MessageProducerBuilder(com.navercorp.pinpoint.plugin.activemq.client.util.MessageProducerBuilder) ActiveMQSession(org.apache.activemq.ActiveMQSession) MessageReceiveHandler(com.navercorp.test.pinpoint.plugin.activemq.MessageReceiveHandler) PollingMessageReceiver(com.navercorp.test.pinpoint.plugin.activemq.PollingMessageReceiver) MessageProducer(javax.jms.MessageProducer) TextMessage(javax.jms.TextMessage) Test(org.junit.Test)

Example 3 with MessageConsumerBuilder

use of com.navercorp.pinpoint.plugin.activemq.client.util.MessageConsumerBuilder in project pinpoint by naver.

the class ActiveMQClientITBase method testQueuePull.

@Test
public void testQueuePull() throws Exception {
    // Given
    final String testQueueName = "TestPullQueue";
    final ActiveMQQueue testQueue = new ActiveMQQueue(testQueueName);
    final String testMessage = "Hello World for Queue!";
    final CountDownLatch consumerLatch = new CountDownLatch(1);
    final AtomicReference<Exception> exception = new AtomicReference<>();
    // create producer
    final ActiveMQSession producerSession = ActiveMQClientITHelper.createSession(getProducerBrokerName(), getProducerBrokerUrl());
    final MessageProducer producer = new MessageProducerBuilder(producerSession, testQueue).waitTillStarted().build();
    final TextMessage expectedTextMessage = producerSession.createTextMessage(testMessage);
    // create and start message receiver
    final ActiveMQSession consumerSession = ActiveMQClientITHelper.createSession(getConsumerBrokerName(), getConsumerBrokerUrl());
    final MessageConsumer consumer = new MessageConsumerBuilder(consumerSession, testQueue).waitTillStarted().build();
    final MessageReceiver messageReceiver = new MessageReceiver(consumer);
    final Thread consumerThread = new Thread(new Runnable() {

        @Override
        public void run() {
            try {
                messageReceiver.receiveMessage(1000L);
            } catch (Exception e) {
                exception.set(e);
            } finally {
                consumerLatch.countDown();
            }
        }
    });
    // When
    producer.send(expectedTextMessage);
    consumerThread.start();
    consumerLatch.await(1L, TimeUnit.SECONDS);
    // Then
    assertNoConsumerError(exception.get());
    PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
    verifier.printCache();
    // Wait till all traces are recorded (consumer traces are recorded from another thread)
    verifier.awaitTraceCount(7, 100, 5000);
    verifier.verifyTraceCount(7);
    verifyProducerSendEvent(verifier, testQueue, producerSession);
    verifyConsumerConsumeEvent(verifier, testQueue, consumerSession);
    // Separate transaction for the consumer's request to receive the message
    verifier.verifyTrace(root(ServiceType.STAND_ALONE.getName(), "Entry Point Process", null, null, null, null));
    Method receiveMessageMethod = MessageReceiver.class.getDeclaredMethod("receiveMessage", long.class);
    verifier.verifyTrace(event(ServiceType.INTERNAL_METHOD.getName(), receiveMessageMethod));
    Method receiveMethod = ActiveMQMessageConsumer.class.getDeclaredMethod("receive", long.class);
    verifier.verifyTrace(event(ACTIVEMQ_CLIENT_INTERNAL, receiveMethod, annotation("activemq.message", getMessageAsString(expectedTextMessage))));
    Method printMessageMethod = MessagePrinter.class.getDeclaredMethod("printMessage", Message.class);
    verifier.verifyTrace(event(ServiceType.INTERNAL_METHOD.getName(), printMessageMethod));
    verifier.verifyTraceCount(0);
}
Also used : ActiveMQMessageConsumer(org.apache.activemq.ActiveMQMessageConsumer) MessageConsumer(javax.jms.MessageConsumer) MessageConsumerBuilder(com.navercorp.pinpoint.plugin.activemq.client.util.MessageConsumerBuilder) AtomicReference(java.util.concurrent.atomic.AtomicReference) Method(java.lang.reflect.Method) CountDownLatch(java.util.concurrent.CountDownLatch) PluginTestVerifier(com.navercorp.pinpoint.bootstrap.plugin.test.PluginTestVerifier) JMSException(javax.jms.JMSException) MessageProducerBuilder(com.navercorp.pinpoint.plugin.activemq.client.util.MessageProducerBuilder) ActiveMQSession(org.apache.activemq.ActiveMQSession) MessageReceiver(com.navercorp.test.pinpoint.plugin.activemq.MessageReceiver) PollingMessageReceiver(com.navercorp.test.pinpoint.plugin.activemq.PollingMessageReceiver) ActiveMQQueue(org.apache.activemq.command.ActiveMQQueue) MessageProducer(javax.jms.MessageProducer) TextMessage(javax.jms.TextMessage) Test(org.junit.Test)

Example 4 with MessageConsumerBuilder

use of com.navercorp.pinpoint.plugin.activemq.client.util.MessageConsumerBuilder in project pinpoint by naver.

the class ActiveMQClientITBase method testTopicPush.

@Test
public void testTopicPush() throws Exception {
    // Given
    final String testTopicName = "TestPushTopic";
    final ActiveMQTopic testTopic = new ActiveMQTopic(testTopicName);
    final String testMessage = "Hello World for Topic!";
    final MessagePrinter messagePrinter = new MessagePrinter();
    final CountDownLatch consumerLatch = new CountDownLatch(2);
    final AtomicReference<Exception> exception = new AtomicReference<>();
    // create producer
    final ActiveMQSession producerSession = ActiveMQClientITHelper.createSession(getProducerBrokerName(), getProducerBrokerUrl());
    final MessageProducer producer = new MessageProducerBuilder(producerSession, testTopic).waitTillStarted().build();
    final TextMessage expectedTextMessage = producerSession.createTextMessage(testMessage);
    // create 2 consumers
    final MessageListener messageListener = new MessageListener() {

        @Override
        public void onMessage(Message message) {
            try {
                messagePrinter.printMessage(message);
            } catch (Exception e) {
                exception.set(e);
            } finally {
                consumerLatch.countDown();
            }
        }
    };
    final ActiveMQSession consumer1Session = ActiveMQClientITHelper.createSession(getConsumerBrokerName(), getConsumerBrokerUrl());
    new MessageConsumerBuilder(consumer1Session, testTopic).withMessageListener(messageListener).waitTillStarted().build();
    ActiveMQSession consumer2Session = ActiveMQClientITHelper.createSession(getConsumerBrokerName(), getConsumerBrokerUrl());
    new MessageConsumerBuilder(consumer2Session, testTopic).withMessageListener(messageListener).waitTillStarted().build();
    // When
    producer.send(expectedTextMessage);
    consumerLatch.await(1L, TimeUnit.SECONDS);
    // Then
    assertNoConsumerError(exception.get());
    PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
    verifier.printCache();
    // Wait till all traces are recorded (consumer traces are recorded from another thread)
    verifier.awaitTraceCount(7, 100, 5000);
    verifier.verifyTraceCount(7);
    verifyProducerSendEvent(verifier, testTopic, producerSession);
    verifyConsumerConsumeEvent(verifier, testTopic, consumer1Session);
    verifyConsumerConsumeEvent(verifier, testTopic, consumer2Session);
    Method printMessageMethod = MessagePrinter.class.getDeclaredMethod("printMessage", Message.class);
    for (int i = 0; i < 2; ++i) {
        verifier.verifyTrace(event(ServiceType.INTERNAL_METHOD.getName(), printMessageMethod));
    }
    verifier.verifyTraceCount(0);
}
Also used : ActiveMQTopic(org.apache.activemq.command.ActiveMQTopic) Message(javax.jms.Message) TextMessage(javax.jms.TextMessage) MessageConsumerBuilder(com.navercorp.pinpoint.plugin.activemq.client.util.MessageConsumerBuilder) MessageListener(javax.jms.MessageListener) MessagePrinter(com.navercorp.test.pinpoint.plugin.activemq.MessagePrinter) AtomicReference(java.util.concurrent.atomic.AtomicReference) Method(java.lang.reflect.Method) CountDownLatch(java.util.concurrent.CountDownLatch) PluginTestVerifier(com.navercorp.pinpoint.bootstrap.plugin.test.PluginTestVerifier) JMSException(javax.jms.JMSException) MessageProducerBuilder(com.navercorp.pinpoint.plugin.activemq.client.util.MessageProducerBuilder) ActiveMQSession(org.apache.activemq.ActiveMQSession) MessageProducer(javax.jms.MessageProducer) TextMessage(javax.jms.TextMessage) Test(org.junit.Test)

Example 5 with MessageConsumerBuilder

use of com.navercorp.pinpoint.plugin.activemq.client.util.MessageConsumerBuilder in project pinpoint by naver.

the class ActiveMQClientITBase method testQueuePoll.

@Test
public void testQueuePoll() throws Exception {
    // Given
    final String testQueueName = "TestPollQueue";
    final ActiveMQQueue testQueue = new ActiveMQQueue(testQueueName);
    final String testMessage = "Hello World for Queue!";
    // create producer
    final ActiveMQSession producerSession = ActiveMQClientITHelper.createSession(getProducerBrokerName(), getProducerBrokerUrl());
    final MessageProducer producer = new MessageProducerBuilder(producerSession, testQueue).waitTillStarted().build();
    final TextMessage expectedTextMessage = producerSession.createTextMessage(testMessage);
    // create consumer
    final ActiveMQSession consumerSession = ActiveMQClientITHelper.createSession(getConsumerBrokerName(), getConsumerBrokerUrl());
    final MessageConsumer consumer = new MessageConsumerBuilder(consumerSession, testQueue).waitTillStarted().build();
    final MessageReceiveHandler messageReceiveHandler = new MessageReceiveHandler();
    final PollingMessageReceiver pollingMessageReceiver = new PollingMessageReceiver(consumer, messageReceiveHandler);
    // When
    pollingMessageReceiver.start();
    producer.send(expectedTextMessage);
    messageReceiveHandler.await(5000L);
    pollingMessageReceiver.stop();
    // Then
    assertNoConsumerError(pollingMessageReceiver.getException());
    PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
    verifier.printCache();
    // Wait till all traces are recorded (consumer traces are recorded from another thread)
    verifier.awaitTraceCount(6, 100, 5000);
    verifier.verifyTraceCount(6);
    verifyProducerSendEvent(verifier, testQueue, producerSession);
    verifyConsumerConsumeEvent(verifier, testQueue, consumerSession);
    verifier.verifyTrace(event(ServiceType.ASYNC.getName(), "Asynchronous Invocation"));
    Method handleMessageMethod = MessageReceiveHandler.class.getDeclaredMethod("handleMessage", Message.class);
    verifier.verifyTrace(event(ServiceType.INTERNAL_METHOD.getName(), handleMessageMethod));
    Method printMessageMethod = MessagePrinter.class.getDeclaredMethod("printMessage", Message.class);
    verifier.verifyTrace(event(ServiceType.INTERNAL_METHOD.getName(), printMessageMethod));
    verifier.verifyTraceCount(0);
}
Also used : MessageProducerBuilder(com.navercorp.pinpoint.plugin.activemq.client.util.MessageProducerBuilder) ActiveMQMessageConsumer(org.apache.activemq.ActiveMQMessageConsumer) MessageConsumer(javax.jms.MessageConsumer) ActiveMQSession(org.apache.activemq.ActiveMQSession) MessageReceiveHandler(com.navercorp.test.pinpoint.plugin.activemq.MessageReceiveHandler) MessageConsumerBuilder(com.navercorp.pinpoint.plugin.activemq.client.util.MessageConsumerBuilder) ActiveMQQueue(org.apache.activemq.command.ActiveMQQueue) PollingMessageReceiver(com.navercorp.test.pinpoint.plugin.activemq.PollingMessageReceiver) MessageProducer(javax.jms.MessageProducer) Method(java.lang.reflect.Method) PluginTestVerifier(com.navercorp.pinpoint.bootstrap.plugin.test.PluginTestVerifier) TextMessage(javax.jms.TextMessage) Test(org.junit.Test)

Aggregations

PluginTestVerifier (com.navercorp.pinpoint.bootstrap.plugin.test.PluginTestVerifier)6 MessageConsumerBuilder (com.navercorp.pinpoint.plugin.activemq.client.util.MessageConsumerBuilder)6 MessageProducerBuilder (com.navercorp.pinpoint.plugin.activemq.client.util.MessageProducerBuilder)6 Method (java.lang.reflect.Method)6 MessageProducer (javax.jms.MessageProducer)6 TextMessage (javax.jms.TextMessage)6 ActiveMQSession (org.apache.activemq.ActiveMQSession)6 Test (org.junit.Test)6 PollingMessageReceiver (com.navercorp.test.pinpoint.plugin.activemq.PollingMessageReceiver)4 CountDownLatch (java.util.concurrent.CountDownLatch)4 AtomicReference (java.util.concurrent.atomic.AtomicReference)4 JMSException (javax.jms.JMSException)4 MessageConsumer (javax.jms.MessageConsumer)4 ActiveMQMessageConsumer (org.apache.activemq.ActiveMQMessageConsumer)4 ActiveMQQueue (org.apache.activemq.command.ActiveMQQueue)3 ActiveMQTopic (org.apache.activemq.command.ActiveMQTopic)3 MessagePrinter (com.navercorp.test.pinpoint.plugin.activemq.MessagePrinter)2 MessageReceiveHandler (com.navercorp.test.pinpoint.plugin.activemq.MessageReceiveHandler)2 MessageReceiver (com.navercorp.test.pinpoint.plugin.activemq.MessageReceiver)2 Message (javax.jms.Message)2