Search in sources :

Example 21 with VCMessage

use of cbit.vcell.message.VCMessage in project vcell by virtualcell.

the class TestBlobMessages method testBlobMessages.

@Test
public void testBlobMessages() throws VCMessagingException {
    // creating one messageProducer session
    ArrayList<VCMessageSession> sessions = new ArrayList<VCMessageSession>();
    for (int i = 0; i < NUM_PRODUCERS; i++) {
        sessions.add(messagingService.createProducerSession());
    }
    AtomicInteger messagesToRead = new AtomicInteger(0);
    long startTime_MS = System.currentTimeMillis();
    final long TIMEOUT_MS = 1000 * 2;
    for (int i = 0; i < NUM_MESSAGES; i++) {
        for (int s = 0; s < NUM_PRODUCERS; s++) {
            VCMessageSession session = sessions.get(s);
            byte[] objectContent = new byte[40000 * (i + 1)];
            Arrays.fill(objectContent, (byte) 22);
            VCMessage message = session.createObjectMessage(objectContent);
            // VCMessage message = session.createObjectMessage(new byte[100000000]);
            session.sendQueueMessage(VCellTestQueue.JimQueue, message, false, 100000L);
            session.commit();
            int numMessages = messagesToRead.incrementAndGet();
            System.out.println("sent message:  messages unread = " + numMessages);
        }
    }
    // create N comsumers
    for (int i = 0; i < NUM_COMSUMERS; i++) {
        QueueListener listener = new QueueListener() {

            public void onQueueMessage(VCMessage vcMessage, VCMessageSession session) throws RollbackException {
                Object objectContent = vcMessage.getObjectContent();
                System.out.println("object content is '" + objectContent + "' of type " + objectContent.getClass().getName());
                String blobInfo = "<no blob>";
                if (vcMessage.propertyExists(VCMessageJms.BLOB_MESSAGE_MONGODB_OBJECTID)) {
                    String objectType = vcMessage.getStringProperty(VCMessageJms.BLOB_MESSAGE_OBJECT_TYPE);
                    int objectSize = vcMessage.getIntProperty(VCMessageJms.BLOB_MESSAGE_OBJECT_SIZE);
                    String objectid = vcMessage.getStringProperty(VCMessageJms.BLOB_MESSAGE_MONGODB_OBJECTID);
                    String persistenceType = vcMessage.getStringProperty(VCMessageJms.BLOB_MESSAGE_PERSISTENCE_TYPE);
                    blobInfo = "BLOB: persistenceType=" + persistenceType + ", object=" + objectType + ", size=" + objectSize + ", objectId=" + objectid;
                }
                System.out.println("<<<< onQueueMessage() >>>> timestampMS=" + vcMessage.getTimestampMS() + ", " + toString() + ",  elapsedTimeS=" + ((System.currentTimeMillis() - vcMessage.getTimestampMS()) / 1000.0) + ", Received: " + blobInfo);
                session.commit();
                int numMessages = messagesToRead.decrementAndGet();
                System.out.println("read message:  messages unread = " + numMessages);
            }
        };
        VCQueueConsumer queueConsumer = new VCQueueConsumer(VCellTestQueue.JimQueue, listener, null, "Queue[" + VCellTestQueue.JimQueue.getName() + "] ==== Consumer Thread " + i, 1);
        messagingService.addMessageConsumer(queueConsumer);
    }
    System.out.println("waiting for messages to be read");
    int numUnreadMessages = messagesToRead.get();
    while (numUnreadMessages > 0) {
        long elapsedTime = System.currentTimeMillis() - startTime_MS;
        System.out.println("elapsed time is " + elapsedTime + " ms, " + numUnreadMessages + " unread messages");
        if (elapsedTime > TIMEOUT_MS) {
            throw new RuntimeException("timeout before processing all messages, " + numUnreadMessages + " unread");
        }
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
        }
        numUnreadMessages = messagesToRead.get();
    }
    System.out.println("done");
}
Also used : QueueListener(cbit.vcell.message.VCQueueConsumer.QueueListener) VCMessageSession(cbit.vcell.message.VCMessageSession) ArrayList(java.util.ArrayList) VCQueueConsumer(cbit.vcell.message.VCQueueConsumer) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) VCMessage(cbit.vcell.message.VCMessage) Test(org.junit.Test)

Example 22 with VCMessage

use of cbit.vcell.message.VCMessage in project vcell by virtualcell.

the class TestQueues method main.

public static void main(String[] args) throws Exception {
    try {
        PropertyLoader.loadProperties();
        VCMessagingService messagingService = new VCMessagingServiceEmbedded();
        messagingService.setConfiguration(new SimpleMessagingDelegate(), null, -1);
        final Calculator calculator = new Calculator();
        // creating one messageProducer session
        ArrayList<VCMessageSession> sessions = new ArrayList<VCMessageSession>();
        for (int i = 0; i < NUM_PRODUCERS; i++) {
            sessions.add(messagingService.createProducerSession());
        }
        int sum = 0;
        for (int i = 0; i < NUM_MESSAGES; i++) {
            for (int s = 0; s < NUM_PRODUCERS; s++) {
                sum++;
                VCMessageSession session = sessions.get(s);
                VCMessage message = session.createTextMessage("message " + i + " from session " + s);
                session.sendQueueMessage(VCellTestQueue.JimQueue, message, false, 100000L);
                session.commit();
            }
            Thread.sleep(2000);
        }
        System.out.println("Correct sum is " + sum);
        Thread.sleep(30);
        // create N comsumers
        for (int i = 0; i < NUM_COMSUMERS; i++) {
            QueueListener listener = new QueueListener() {

                public void onQueueMessage(VCMessage vcMessage, VCMessageSession session) throws RollbackException {
                    // new Thread()
                    System.out.println("timestampMS=" + vcMessage.getTimestampMS() + ", " + toString() + ",  elapsedTimeS=" + ((System.currentTimeMillis() - vcMessage.getTimestampMS()) / 1000.0) + ", Received: " + vcMessage.getTextContent());
                    // int number = Integer.parseInt(vcMessage.getTextContent());
                    calculator.add(1);
                }
            };
            VCQueueConsumer queueConsumer = new VCQueueConsumer(VCellTestQueue.JimQueue, listener, null, "Queue[" + VCellTestQueue.JimQueue.getName() + "] ==== Consumer Thread " + i, 1);
            messagingService.addMessageConsumer(queueConsumer);
        }
        while (calculator.getSum() < sum) {
            System.out.println("calculator sum = " + calculator.getSum());
            Thread.sleep(1000);
        }
        System.out.println("calculator sum = " + calculator.getSum());
        System.out.println("main program calling closeAll()");
        messagingService.close();
        System.out.println("main program exiting");
    } catch (Exception e) {
        e.printStackTrace(System.out);
    }
}
Also used : SimpleMessagingDelegate(cbit.vcell.message.SimpleMessagingDelegate) QueueListener(cbit.vcell.message.VCQueueConsumer.QueueListener) VCMessage(cbit.vcell.message.VCMessage) VCMessageSession(cbit.vcell.message.VCMessageSession) VCMessagingServiceEmbedded(cbit.vcell.message.jms.activeMQ.VCMessagingServiceEmbedded) ArrayList(java.util.ArrayList) VCMessagingService(cbit.vcell.message.VCMessagingService) RollbackException(cbit.vcell.message.RollbackException) VCQueueConsumer(cbit.vcell.message.VCQueueConsumer)

Aggregations

VCMessage (cbit.vcell.message.VCMessage)22 VCMessageSession (cbit.vcell.message.VCMessageSession)10 VCMessagingException (cbit.vcell.message.VCMessagingException)9 VCMessageSelector (cbit.vcell.message.VCMessageSelector)6 VCQueueConsumer (cbit.vcell.message.VCQueueConsumer)5 QueueListener (cbit.vcell.message.VCQueueConsumer.QueueListener)5 VCDestination (cbit.vcell.message.VCDestination)4 SimulationJobStatus (cbit.vcell.server.SimulationJobStatus)4 FileNotFoundException (java.io.FileNotFoundException)4 RollbackException (cbit.vcell.message.RollbackException)3 VCTopicConsumer (cbit.vcell.message.VCTopicConsumer)3 TopicListener (cbit.vcell.message.VCTopicConsumer.TopicListener)3 LocalVCMessageAdapter (cbit.vcell.message.local.LocalVCMessageAdapter)3 LocalVCMessageListener (cbit.vcell.message.local.LocalVCMessageAdapter.LocalVCMessageListener)3 SolverException (cbit.vcell.solver.SolverException)3 XmlParseException (cbit.vcell.xml.XmlParseException)3 DataAccessException (org.vcell.util.DataAccessException)3 MessagePropertyNotFoundException (cbit.vcell.message.MessagePropertyNotFoundException)2 VCMessagingService (cbit.vcell.message.VCMessagingService)2 VCPooledQueueConsumer (cbit.vcell.message.VCPooledQueueConsumer)2