Search in sources :

Example 1 with JMSProducer

use of javax.jms.JMSProducer in project activemq-artemis by apache.

the class JMSTopicConsumerTest method testSendAndReceiveOnAutoCreatedTopicJMS2.

@Test(timeout = 60000)
public void testSendAndReceiveOnAutoCreatedTopicJMS2() throws Exception {
    ConnectionFactory cf = new JmsConnectionFactory(getBrokerQpidJMSConnectionURI());
    JMSContext context = cf.createContext();
    String topicName = UUID.randomUUID().toString();
    SimpleString simpleTopicName = SimpleString.toSimpleString(topicName);
    try {
        Topic topic = context.createTopic(topicName);
        JMSProducer producer = context.createProducer();
        TextMessage message = context.createTextMessage("test-message");
        // this will auto-create the address, but not the subscription queue
        producer.send(topic, message);
        assertNotNull(server.getAddressInfo(simpleTopicName));
        assertEquals(RoutingType.MULTICAST, server.getAddressInfo(simpleTopicName).getRoutingType());
        assertTrue(server.getAddressInfo(simpleTopicName).isAutoCreated());
        assertTrue(server.getPostOffice().getBindingsForAddress(simpleTopicName).getBindings().isEmpty());
        // this will auto-create the subscription queue
        JMSConsumer consumer = context.createConsumer(topic);
        assertFalse(server.getPostOffice().getBindingsForAddress(simpleTopicName).getBindings().isEmpty());
        producer.send(topic, message);
        context.start();
        message = (TextMessage) consumer.receive(1000);
        assertNotNull(message);
        assertNotNull(message.getText());
        assertEquals("test-message", message.getText());
        consumer.close();
        assertTrue(server.getPostOffice().getBindingsForAddress(simpleTopicName).getBindings().isEmpty());
    } finally {
        context.close();
    }
}
Also used : JmsConnectionFactory(org.apache.qpid.jms.JmsConnectionFactory) ConnectionFactory(javax.jms.ConnectionFactory) JMSConsumer(javax.jms.JMSConsumer) JmsConnectionFactory(org.apache.qpid.jms.JmsConnectionFactory) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) JMSProducer(javax.jms.JMSProducer) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) Topic(javax.jms.Topic) JMSContext(javax.jms.JMSContext) TextMessage(javax.jms.TextMessage) Test(org.junit.Test)

Example 2 with JMSProducer

use of javax.jms.JMSProducer in project activemq-artemis by apache.

the class ExclusiveTest method testExclusiveWithJMS2Producer.

@Test
public void testExclusiveWithJMS2Producer() throws Exception {
    ConnectionFactory fact = getCF();
    JMSContext ctx = addContext(getCF().createContext(JMSContext.SESSION_TRANSACTED));
    try {
        JMSProducer producer = ctx.createProducer();
        Destination queue = ctx.createQueue(queueName.toString());
        JMSConsumer consumer1 = ctx.createConsumer(queue);
        JMSConsumer consumer2 = ctx.createConsumer(queue);
        JMSConsumer consumer3 = ctx.createConsumer(queue);
        ctx.start();
        for (int j = 0; j < 100; j++) {
            TextMessage message = ctx.createTextMessage("Message" + j);
            producer.send(queue, message);
        }
        ctx.commit();
        // All msgs should go to the first consumer
        for (int j = 0; j < 100; j++) {
            TextMessage tm = (TextMessage) consumer1.receive(10000);
            assertNotNull(tm);
            tm.acknowledge();
            assertEquals("Message" + j, tm.getText());
            tm = (TextMessage) consumer2.receiveNoWait();
            assertNull(tm);
            tm = (TextMessage) consumer3.receiveNoWait();
            assertNull(tm);
        }
        ctx.commit();
    } finally {
        ctx.close();
    }
}
Also used : ActiveMQDestination(org.apache.activemq.artemis.jms.client.ActiveMQDestination) Destination(javax.jms.Destination) ConnectionFactory(javax.jms.ConnectionFactory) JMSConsumer(javax.jms.JMSConsumer) JMSProducer(javax.jms.JMSProducer) JMSContext(javax.jms.JMSContext) TextMessage(javax.jms.TextMessage) Test(org.junit.Test)

Example 3 with JMSProducer

use of javax.jms.JMSProducer in project activemq-artemis by apache.

the class JMSSharedConsumerExample method main.

public static void main(final String[] args) throws Exception {
    InitialContext initialContext = null;
    JMSContext jmsContext = null;
    JMSContext jmsContext2 = null;
    try {
        // Step 1. Create an initial context to perform the JNDI lookup.
        initialContext = new InitialContext();
        // Step 2. Perfom a lookup on the queue
        Topic topic = (Topic) initialContext.lookup("topic/exampleTopic");
        // Step 3. Perform a lookup on the Connection Factory
        ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("ConnectionFactory");
        // Step 4.Create a JMS Context
        jmsContext = cf.createContext();
        // Step 5. Create a message producer.
        JMSProducer producer = jmsContext.createProducer();
        // Step 6. Create a shared consumer
        JMSConsumer jmsConsumer = jmsContext.createSharedConsumer(topic, "sc1");
        // Step 7. Create a second JMS Context for a second shared consumer
        jmsContext2 = cf.createContext();
        // Step 8. Create the second shared consumer
        JMSConsumer jmsConsumer2 = jmsContext2.createSharedConsumer(topic, "sc1");
        // Step 9. send 2 messages
        producer.send(topic, "this is a String!");
        producer.send(topic, "this is a second String!");
        // Step 10. receive the messages shared by both consumers
        String body = jmsConsumer.receiveBody(String.class, 5000);
        System.out.println("body = " + body);
        body = jmsConsumer2.receiveBody(String.class, 5000);
        System.out.println("body = " + body);
    } finally {
        // Step 11. Be sure to close our JMS resources!
        if (initialContext != null) {
            initialContext.close();
        }
        if (jmsContext != null) {
            jmsContext.close();
        }
        if (jmsContext2 != null) {
            jmsContext2.close();
        }
    }
}
Also used : ConnectionFactory(javax.jms.ConnectionFactory) JMSConsumer(javax.jms.JMSConsumer) JMSProducer(javax.jms.JMSProducer) Topic(javax.jms.Topic) InitialContext(javax.naming.InitialContext) JMSContext(javax.jms.JMSContext)

Example 4 with JMSProducer

use of javax.jms.JMSProducer in project activemq-artemis by apache.

the class JmsConsumerTest method testShareDuraleWithJMSContext.

@Test
public void testShareDuraleWithJMSContext() throws Exception {
    ((ActiveMQConnectionFactory) cf).setConsumerWindowSize(0);
    JMSContext conn = cf.createContext(JMSContext.AUTO_ACKNOWLEDGE);
    JMSConsumer consumer = conn.createSharedDurableConsumer(topic, "c1");
    JMSProducer producer = conn.createProducer();
    for (int i = 0; i < 100; i++) {
        producer.setProperty("count", i).send(topic, "test" + i);
    }
    JMSContext conn2 = conn.createContext(JMSContext.AUTO_ACKNOWLEDGE);
    JMSConsumer consumer2 = conn2.createSharedDurableConsumer(topic, "c1");
    for (int i = 0; i < 50; i++) {
        String txt = consumer.receiveBody(String.class, 5000);
        System.out.println("TXT:" + txt);
        Assert.assertNotNull(txt);
        txt = consumer.receiveBody(String.class, 5000);
        System.out.println("TXT:" + txt);
        Assert.assertNotNull(txt);
    }
    Assert.assertNull(consumer.receiveNoWait());
    Assert.assertNull(consumer2.receiveNoWait());
    boolean exceptionHappened = false;
    try {
        conn.unsubscribe("c1");
    } catch (Exception e) {
        e.printStackTrace();
        exceptionHappened = true;
    }
    Assert.assertTrue(exceptionHappened);
    consumer.close();
    consumer2.close();
    conn2.close();
    conn.unsubscribe("c1");
}
Also used : ActiveMQConnectionFactory(org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory) JMSConsumer(javax.jms.JMSConsumer) JMSProducer(javax.jms.JMSProducer) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) JMSContext(javax.jms.JMSContext) JMSException(javax.jms.JMSException) Test(org.junit.Test)

Example 5 with JMSProducer

use of javax.jms.JMSProducer in project activemq-artemis by apache.

the class JmsContextTest method testReceiveBytes.

@Test
public void testReceiveBytes() throws Exception {
    JMSProducer producer = context.createProducer();
    JMSConsumer consumer = context.createConsumer(queue1);
    BytesMessage bytesSend = context.createBytesMessage();
    bytesSend.writeByte((byte) 1);
    bytesSend.writeLong(2L);
    producer.send(queue1, bytesSend);
    BytesMessage msgReceived = (BytesMessage) consumer.receiveNoWait();
    byte[] bytesArray = msgReceived.getBody(byte[].class);
    assertEquals((byte) 1, msgReceived.readByte());
    assertEquals(2L, msgReceived.readLong());
    DataInputStream dataInputStream = new DataInputStream(new ByteArrayInputStream(bytesArray));
    assertEquals((byte) 1, dataInputStream.readByte());
    assertEquals(2L, dataInputStream.readLong());
}
Also used : JMSConsumer(javax.jms.JMSConsumer) ByteArrayInputStream(java.io.ByteArrayInputStream) JMSProducer(javax.jms.JMSProducer) BytesMessage(javax.jms.BytesMessage) DataInputStream(java.io.DataInputStream) Test(org.junit.Test)

Aggregations

JMSProducer (javax.jms.JMSProducer)46 Test (org.junit.Test)36 JMSContext (javax.jms.JMSContext)27 TextMessage (javax.jms.TextMessage)24 JMSConsumer (javax.jms.JMSConsumer)23 ConnectionFactory (javax.jms.ConnectionFactory)11 Message (javax.jms.Message)11 BytesMessage (javax.jms.BytesMessage)8 Queue (javax.jms.Queue)8 SimpleString (org.apache.activemq.artemis.api.core.SimpleString)8 Destination (javax.jms.Destination)7 CountDownLatch (java.util.concurrent.CountDownLatch)6 StreamMessage (javax.jms.StreamMessage)6 JMSException (javax.jms.JMSException)5 InitialContext (javax.naming.InitialContext)5 JMSRuntimeException (javax.jms.JMSRuntimeException)4 ActiveMQConnectionFactory (org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory)4 Topic (javax.jms.Topic)3 Path (java.nio.file.Path)2 CompletionListener (javax.jms.CompletionListener)2