Search in sources :

Example 91 with Message

use of org.apache.activemq.artemis.api.core.Message in project activemq-artemis by apache.

the class ManagementServiceImpl method sendNotification.

@Override
public void sendNotification(final Notification notification) throws Exception {
    if (logger.isTraceEnabled()) {
        logger.trace("Sending Notification = " + notification + ", notificationEnabled=" + notificationsEnabled + " messagingServerControl=" + messagingServerControl);
    }
    // This needs to be synchronized since we need to ensure notifications are processed in strict sequence
    synchronized (this) {
        if (messagingServerControl != null && notificationsEnabled) {
            // if a notification occurs at same time as sendQueueInfoToQueue is processed
            synchronized (postOffice.getNotificationLock()) {
                // First send to any local listeners
                for (NotificationListener listener : listeners) {
                    try {
                        listener.onNotification(notification);
                    } catch (Exception e) {
                        // Exception thrown from one listener should not stop execution of others
                        ActiveMQServerLogger.LOGGER.errorCallingNotifListener(e);
                    }
                }
                // https://jira.jboss.org/jira/browse/HORNETQ-317
                if (messagingServer == null || !messagingServer.isActive()) {
                    if (logger.isDebugEnabled()) {
                        logger.debug("ignoring message " + notification + " as the server is not initialized");
                    }
                    return;
                }
                long messageID = storageManager.generateID();
                Message notificationMessage = new CoreMessage(messageID, 512);
                // Notification messages are always durable so the user can choose whether to add a durable queue to
                // consume them in
                notificationMessage.setDurable(true);
                notificationMessage.setAddress(managementNotificationAddress);
                if (notification.getProperties() != null) {
                    TypedProperties props = notification.getProperties();
                    for (SimpleString name : notification.getProperties().getPropertyNames()) {
                        notificationMessage.putObjectProperty(name, props.getProperty(name));
                    }
                }
                notificationMessage.putStringProperty(ManagementHelper.HDR_NOTIFICATION_TYPE, new SimpleString(notification.getType().toString()));
                notificationMessage.putLongProperty(ManagementHelper.HDR_NOTIFICATION_TIMESTAMP, System.currentTimeMillis());
                if (notification.getUID() != null) {
                    notificationMessage.putStringProperty(new SimpleString("foobar"), new SimpleString(notification.getUID()));
                }
                postOffice.route(notificationMessage, false);
            }
        }
    }
}
Also used : ICoreMessage(org.apache.activemq.artemis.api.core.ICoreMessage) CoreMessage(org.apache.activemq.artemis.core.message.impl.CoreMessage) Message(org.apache.activemq.artemis.api.core.Message) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) TypedProperties(org.apache.activemq.artemis.utils.collections.TypedProperties) InvocationTargetException(java.lang.reflect.InvocationTargetException) MBeanRegistrationException(javax.management.MBeanRegistrationException) InstanceNotFoundException(javax.management.InstanceNotFoundException) ICoreMessage(org.apache.activemq.artemis.api.core.ICoreMessage) CoreMessage(org.apache.activemq.artemis.core.message.impl.CoreMessage) NotificationListener(org.apache.activemq.artemis.core.server.management.NotificationListener)

Example 92 with Message

use of org.apache.activemq.artemis.api.core.Message in project activemq-artemis by apache.

the class TransactionDetail method toJSON.

public JsonObject toJSON() throws Exception {
    DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);
    JsonObjectBuilder detailJson = JsonLoader.createObjectBuilder().add(KEY_CREATION_TIME, dateFormat.format(new Date(this.creationTime))).add(KEY_XID_AS_BASE64, XidImpl.toBase64String(this.xid)).add(KEY_XID_FORMAT_ID, this.xid.getFormatId()).add(KEY_XID_GLOBAL_TXID, new String(this.xid.getGlobalTransactionId())).add(KEY_XID_BRANCH_QUAL, new String(this.xid.getBranchQualifier()));
    JsonArrayBuilder msgsJson = JsonLoader.createArrayBuilder();
    List<TransactionOperation> txops = null;
    if (this.transaction != null) {
        txops = this.transaction.getAllOperations();
    }
    if (txops == null) {
        return detailJson.build();
    }
    for (TransactionOperation op : txops) {
        String opClassName = op.getClass().getName();
        String opType = null;
        if (opClassName.equals("org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl$AddOperation")) {
            opType = "(+) send";
        } else if (opClassName.equals("org.apache.activemq.artemis.core.server.impl.QueueImpl$RefsOperation")) {
            opType = "(-) receive";
        }
        List<MessageReference> msgs = op.getRelatedMessageReferences();
        if (msgs == null) {
            continue;
        }
        for (MessageReference ref : msgs) {
            JsonObjectBuilder msgJson = JsonLoader.createObjectBuilder();
            msgJson.add(KEY_MSG_OP_TYPE, opType);
            Message msg = ref.getMessage().copy();
            msgJson.add(KEY_MSG_TYPE, decodeMessageType(msg));
            JsonUtil.addToObject(KEY_MSG_PROPERTIES, decodeMessageProperties(msg), msgJson);
            msgsJson.add(msgJson);
        }
    }
    detailJson.add(KEY_TX_RELATED_MESSAGES, msgsJson);
    return detailJson.build();
}
Also used : Message(org.apache.activemq.artemis.api.core.Message) DateFormat(java.text.DateFormat) JsonArrayBuilder(javax.json.JsonArrayBuilder) JsonObjectBuilder(javax.json.JsonObjectBuilder) MessageReference(org.apache.activemq.artemis.core.server.MessageReference) Date(java.util.Date)

Example 93 with Message

use of org.apache.activemq.artemis.api.core.Message in project activemq-artemis by apache.

the class CoreClientOverOneWaySSLTest method testOneWaySSLReloaded.

@Test
public void testOneWaySSLReloaded() throws Exception {
    createCustomSslServer();
    server.createQueue(CoreClientOverOneWaySSLTest.QUEUE, RoutingType.ANYCAST, CoreClientOverOneWaySSLTest.QUEUE, null, false, false);
    String text = RandomUtil.randomString();
    // create a valid SSL connection and keep it for use later
    tc.getParams().put(TransportConstants.SSL_ENABLED_PROP_NAME, true);
    tc.getParams().put(TransportConstants.TRUSTSTORE_PROVIDER_PROP_NAME, storeType);
    tc.getParams().put(TransportConstants.TRUSTSTORE_PATH_PROP_NAME, CLIENT_SIDE_TRUSTSTORE);
    tc.getParams().put(TransportConstants.TRUSTSTORE_PASSWORD_PROP_NAME, PASSWORD);
    ServerLocator existingLocator = addServerLocator(ActiveMQClient.createServerLocatorWithoutHA(tc));
    existingLocator.setCallTimeout(3000);
    ClientSessionFactory existingSessionFactory = addSessionFactory(createSessionFactory(existingLocator));
    ClientSession existingSession = addClientSession(existingSessionFactory.createSession(false, true, true));
    ClientConsumer existingConsumer = addClientConsumer(existingSession.createConsumer(CoreClientOverOneWaySSLTest.QUEUE));
    // create an invalid SSL connection
    tc.getParams().put(TransportConstants.SSL_ENABLED_PROP_NAME, true);
    tc.getParams().put(TransportConstants.TRUSTSTORE_PROVIDER_PROP_NAME, storeType);
    tc.getParams().put(TransportConstants.TRUSTSTORE_PATH_PROP_NAME, "other-client-side-truststore." + storeType.toLowerCase());
    tc.getParams().put(TransportConstants.TRUSTSTORE_PASSWORD_PROP_NAME, PASSWORD);
    ServerLocator locator = addServerLocator(ActiveMQClient.createServerLocatorWithoutHA(tc)).setCallTimeout(3000);
    try {
        addSessionFactory(createSessionFactory(locator));
        fail("Creating session here should fail due to SSL handshake problems.");
    } catch (Exception e) {
    // ignore
    }
    // reload the acceptor to reload the SSL stores
    NettyAcceptor acceptor = (NettyAcceptor) server.getRemotingService().getAcceptor("nettySSL");
    acceptor.setKeyStorePath("other-server-side-keystore." + storeType.toLowerCase());
    acceptor.reload();
    // create a session with the locator which failed previously proving that the SSL stores have been reloaded
    ClientSessionFactory sf = addSessionFactory(createSessionFactory(locator));
    ClientSession session = addClientSession(sf.createSession(false, true, true));
    ClientProducer producer = addClientProducer(session.createProducer(CoreClientOverOneWaySSLTest.QUEUE));
    ClientMessage message = createTextMessage(session, text);
    producer.send(message);
    producer.send(message);
    ClientConsumer consumer = addClientConsumer(session.createConsumer(CoreClientOverOneWaySSLTest.QUEUE));
    session.start();
    Message m = consumer.receive(1000);
    Assert.assertNotNull(m);
    Assert.assertEquals(text, m.getBodyBuffer().readString());
    consumer.close();
    // use the existing connection to prove it wasn't lost when the acceptor was reloaded
    existingSession.start();
    m = existingConsumer.receive(1000);
    Assert.assertNotNull(m);
    Assert.assertEquals(text, m.getBodyBuffer().readString());
}
Also used : ClientMessage(org.apache.activemq.artemis.api.core.client.ClientMessage) Message(org.apache.activemq.artemis.api.core.Message) NettyAcceptor(org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptor) ClientSession(org.apache.activemq.artemis.api.core.client.ClientSession) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) ClientSessionFactory(org.apache.activemq.artemis.api.core.client.ClientSessionFactory) ClientMessage(org.apache.activemq.artemis.api.core.client.ClientMessage) ClientConsumer(org.apache.activemq.artemis.api.core.client.ClientConsumer) ClientProducer(org.apache.activemq.artemis.api.core.client.ClientProducer) ServerLocator(org.apache.activemq.artemis.api.core.client.ServerLocator) ActiveMQNotConnectedException(org.apache.activemq.artemis.api.core.ActiveMQNotConnectedException) ActiveMQException(org.apache.activemq.artemis.api.core.ActiveMQException) ActiveMQConnectionTimedOutException(org.apache.activemq.artemis.api.core.ActiveMQConnectionTimedOutException) Test(org.junit.Test)

Example 94 with Message

use of org.apache.activemq.artemis.api.core.Message in project activemq-artemis by apache.

the class CoreClientOverOneWaySSLTest method testOneWaySSLVerifyHost.

@Test
public void testOneWaySSLVerifyHost() throws Exception {
    createCustomSslServer(null, null, true);
    String text = RandomUtil.randomString();
    tc.getParams().put(TransportConstants.SSL_ENABLED_PROP_NAME, true);
    tc.getParams().put(TransportConstants.TRUSTSTORE_PROVIDER_PROP_NAME, storeType);
    tc.getParams().put(TransportConstants.TRUSTSTORE_PATH_PROP_NAME, "verified-" + CLIENT_SIDE_TRUSTSTORE);
    tc.getParams().put(TransportConstants.TRUSTSTORE_PASSWORD_PROP_NAME, PASSWORD);
    tc.getParams().put(TransportConstants.VERIFY_HOST_PROP_NAME, true);
    ServerLocator locator = addServerLocator(ActiveMQClient.createServerLocatorWithoutHA(tc));
    ClientSessionFactory sf = addSessionFactory(createSessionFactory(locator));
    ClientSession session = addClientSession(sf.createSession(false, true, true));
    session.createQueue(CoreClientOverOneWaySSLTest.QUEUE, CoreClientOverOneWaySSLTest.QUEUE, false);
    ClientProducer producer = addClientProducer(session.createProducer(CoreClientOverOneWaySSLTest.QUEUE));
    ClientMessage message = createTextMessage(session, text);
    producer.send(message);
    ClientConsumer consumer = addClientConsumer(session.createConsumer(CoreClientOverOneWaySSLTest.QUEUE));
    session.start();
    Message m = consumer.receive(1000);
    Assert.assertNotNull(m);
    Assert.assertEquals(text, m.getBodyBuffer().readString());
}
Also used : ClientMessage(org.apache.activemq.artemis.api.core.client.ClientMessage) Message(org.apache.activemq.artemis.api.core.Message) ClientSession(org.apache.activemq.artemis.api.core.client.ClientSession) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) ClientSessionFactory(org.apache.activemq.artemis.api.core.client.ClientSessionFactory) ClientMessage(org.apache.activemq.artemis.api.core.client.ClientMessage) ClientConsumer(org.apache.activemq.artemis.api.core.client.ClientConsumer) ClientProducer(org.apache.activemq.artemis.api.core.client.ClientProducer) ServerLocator(org.apache.activemq.artemis.api.core.client.ServerLocator) Test(org.junit.Test)

Example 95 with Message

use of org.apache.activemq.artemis.api.core.Message in project activemq-artemis by apache.

the class SendAcknowledgementsExample method main.

public static void main(final String[] args) throws Exception {
    Connection connection = null;
    InitialContext initialContext = null;
    try {
        // Step 1. Create an initial context to perform the JNDI lookup.
        initialContext = new InitialContext();
        // Step 2. Perfom a lookup on the queue
        Queue queue = (Queue) initialContext.lookup("queue/exampleQueue");
        // Step 3. Perform a lookup on the Connection Factory
        ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("ConnectionFactory");
        // Step 4. Create a JMS Connection
        connection = cf.createConnection();
        // Step 5. Define a SendAcknowledgementHandler which will receive asynchronous acknowledgements
        class MySendAcknowledgementsHandler implements SendAcknowledgementHandler {

            int count = 0;

            @Override
            public void sendAcknowledged(final Message message) {
                System.out.println("Received send acknowledgement for message " + count++);
            }
        }
        // Step 6. Create a JMS Session
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // Step 7. Set the handler on the underlying core session
        ClientSession coreSession = ((ActiveMQSession) session).getCoreSession();
        coreSession.setSendAcknowledgementHandler(new MySendAcknowledgementsHandler());
        // Step 6. Create a JMS Message Producer
        MessageProducer producer = session.createProducer(queue);
        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        // Step 7. Send 5000 messages, the handler will get called asynchronously some time later after the messages
        // are sent.
        final int numMessages = 5000;
        for (int i = 0; i < numMessages; i++) {
            javax.jms.Message jmsMessage = session.createMessage();
            producer.send(jmsMessage);
            System.out.println("Sent message " + i);
        }
    } finally {
        // Step 12. Be sure to close our JMS resources!
        if (initialContext != null) {
            initialContext.close();
        }
        if (connection != null) {
            connection.close();
        }
    }
}
Also used : Message(org.apache.activemq.artemis.api.core.Message) Connection(javax.jms.Connection) SendAcknowledgementHandler(org.apache.activemq.artemis.api.core.client.SendAcknowledgementHandler) InitialContext(javax.naming.InitialContext) ConnectionFactory(javax.jms.ConnectionFactory) ActiveMQSession(org.apache.activemq.artemis.jms.client.ActiveMQSession) ClientSession(org.apache.activemq.artemis.api.core.client.ClientSession) MessageProducer(javax.jms.MessageProducer) Queue(javax.jms.Queue) Session(javax.jms.Session) ClientSession(org.apache.activemq.artemis.api.core.client.ClientSession) ActiveMQSession(org.apache.activemq.artemis.jms.client.ActiveMQSession)

Aggregations

Message (org.apache.activemq.artemis.api.core.Message)114 ClientMessage (org.apache.activemq.artemis.api.core.client.ClientMessage)56 Test (org.junit.Test)52 SimpleString (org.apache.activemq.artemis.api.core.SimpleString)51 ClientSession (org.apache.activemq.artemis.api.core.client.ClientSession)48 ClientProducer (org.apache.activemq.artemis.api.core.client.ClientProducer)46 ClientSessionFactory (org.apache.activemq.artemis.api.core.client.ClientSessionFactory)41 ClientConsumer (org.apache.activemq.artemis.api.core.client.ClientConsumer)35 ActiveMQServer (org.apache.activemq.artemis.core.server.ActiveMQServer)34 CoreMessage (org.apache.activemq.artemis.core.message.impl.CoreMessage)28 AddressSettings (org.apache.activemq.artemis.core.settings.impl.AddressSettings)18 LargeServerMessage (org.apache.activemq.artemis.core.server.LargeServerMessage)16 ArrayList (java.util.ArrayList)15 MessageReference (org.apache.activemq.artemis.core.server.MessageReference)12 ActiveMQBuffer (org.apache.activemq.artemis.api.core.ActiveMQBuffer)11 ICoreMessage (org.apache.activemq.artemis.api.core.ICoreMessage)11 ServerLocator (org.apache.activemq.artemis.api.core.client.ServerLocator)10 Transaction (org.apache.activemq.artemis.core.transaction.Transaction)10 HashMap (java.util.HashMap)9 TransactionImpl (org.apache.activemq.artemis.core.transaction.impl.TransactionImpl)8