use of org.apache.activemq.command.ConsumerInfo in project activemq-artemis by apache.
the class ForwardingBridgeTest method testForwardMessageCompressed.
public void testForwardMessageCompressed() throws Exception {
bridge.setUseCompression(true);
// Start a producer on local broker
StubConnection connection1 = createConnection();
ConnectionInfo connectionInfo1 = createConnectionInfo();
SessionInfo sessionInfo1 = createSessionInfo(connectionInfo1);
ProducerInfo producerInfo = createProducerInfo(sessionInfo1);
connection1.send(connectionInfo1);
connection1.send(sessionInfo1);
connection1.send(producerInfo);
destination = createDestinationInfo(connection1, connectionInfo1, destinationType);
// Start a consumer on a remote broker
StubConnection connection2 = createRemoteConnection();
ConnectionInfo connectionInfo2 = createConnectionInfo();
SessionInfo sessionInfo2 = createSessionInfo(connectionInfo2);
connection2.send(connectionInfo2);
connection2.send(sessionInfo2);
ConsumerInfo consumerInfo = createConsumerInfo(sessionInfo2, destination);
connection2.send(consumerInfo);
Thread.sleep(1000);
// Give forwarding bridge a chance to finish setting up
try {
Thread.sleep(1000);
} catch (InterruptedException ie) {
ie.printStackTrace();
}
// Send the message to the local boker.
connection1.send(createMessage(producerInfo, destination, deliveryMode));
// Make sure the message was delivered via the remote.
Message m = receiveMessage(connection2);
assertNotNull(m);
// Make sure its compressed now
ActiveMQMessage message = (ActiveMQMessage) m;
assertTrue(message.isCompressed());
}
use of org.apache.activemq.command.ConsumerInfo in project activemq-artemis by apache.
the class ForwardingBridgeTest method testAddConsumerThenSend.
public void testAddConsumerThenSend() throws Exception {
// Start a producer on local broker
StubConnection connection1 = createConnection();
ConnectionInfo connectionInfo1 = createConnectionInfo();
SessionInfo sessionInfo1 = createSessionInfo(connectionInfo1);
ProducerInfo producerInfo = createProducerInfo(sessionInfo1);
connection1.send(connectionInfo1);
connection1.send(sessionInfo1);
connection1.send(producerInfo);
destination = createDestinationInfo(connection1, connectionInfo1, destinationType);
// Start a consumer on a remote broker
StubConnection connection2 = createRemoteConnection();
ConnectionInfo connectionInfo2 = createConnectionInfo();
SessionInfo sessionInfo2 = createSessionInfo(connectionInfo2);
connection2.send(connectionInfo2);
connection2.send(sessionInfo2);
ConsumerInfo consumerInfo = createConsumerInfo(sessionInfo2, destination);
connection2.send(consumerInfo);
Thread.sleep(1000);
// Give forwarding bridge a chance to finish setting up
try {
Thread.sleep(1000);
} catch (InterruptedException ie) {
ie.printStackTrace();
}
// Send the message to the local boker.
connection1.send(createMessage(producerInfo, destination, deliveryMode));
// Make sure the message was delivered via the remote.
Message m = receiveMessage(connection2);
assertNotNull(m);
}
use of org.apache.activemq.command.ConsumerInfo in project activemq-artemis by apache.
the class NetworkRouteTest method before.
@Before
public void before() throws Exception {
control = EasyMock.createControl();
localBroker = control.createMock(Transport.class);
remoteBroker = control.createMock(Transport.class);
NetworkBridgeConfiguration configuration = new NetworkBridgeConfiguration();
brokerService = new BrokerService();
BrokerInfo remoteBrokerInfo = new BrokerInfo();
configuration.setDuplex(true);
configuration.setNetworkTTL(5);
brokerService.setBrokerId("broker-1");
brokerService.setPersistent(false);
brokerService.setUseJmx(false);
brokerService.start();
brokerService.waitUntilStarted();
remoteBrokerInfo.setBrokerId(new BrokerId("remote-broker-id"));
remoteBrokerInfo.setBrokerName("remote-broker-name");
localBroker.setTransportListener(EasyMock.isA(TransportListener.class));
ArgHolder localListenerRef = ArgHolder.holdArgsForLastVoidCall();
remoteBroker.setTransportListener(EasyMock.isA(TransportListener.class));
ArgHolder remoteListenerRef = ArgHolder.holdArgsForLastVoidCall();
localBroker.start();
remoteBroker.start();
remoteBroker.oneway(EasyMock.isA(Object.class));
EasyMock.expectLastCall().times(4);
remoteBroker.oneway(EasyMock.isA(Object.class));
ExpectationWaiter remoteInitWaiter = ExpectationWaiter.waiterForLastVoidCall();
localBroker.oneway(remoteBrokerInfo);
EasyMock.expect(localBroker.request(EasyMock.isA(Object.class))).andReturn(null);
localBroker.oneway(EasyMock.isA(Object.class));
ExpectationWaiter localInitWaiter = ExpectationWaiter.waiterForLastVoidCall();
control.replay();
DurableConduitBridge bridge = new DurableConduitBridge(configuration, localBroker, remoteBroker);
bridge.setBrokerService(brokerService);
bridge.start();
localListener = (TransportListener) localListenerRef.getArguments()[0];
Assert.assertNotNull(localListener);
remoteListener = (TransportListener) remoteListenerRef.getArguments()[0];
Assert.assertNotNull(remoteListener);
remoteListener.onCommand(remoteBrokerInfo);
remoteInitWaiter.assertHappens(5, TimeUnit.SECONDS);
localInitWaiter.assertHappens(5, TimeUnit.SECONDS);
control.verify();
control.reset();
ActiveMQMessage msg = new ActiveMQMessage();
msg.setDestination(new ActiveMQTopic("test"));
msgDispatch = new MessageDispatch();
msgDispatch.setMessage(msg);
ConsumerInfo path1 = new ConsumerInfo();
path1.setDestination(msg.getDestination());
path1.setConsumerId(new ConsumerId(new SessionId(new ConnectionId("conn-id-1"), 1), 3));
path1.setBrokerPath(new BrokerId[] { new BrokerId("remote-broker-id"), new BrokerId("server(1)-broker-id") });
path1Msg = new ActiveMQMessage();
path1Msg.setDestination(AdvisorySupport.getConsumerAdvisoryTopic(path1.getDestination()));
path1Msg.setDataStructure(path1);
ConsumerInfo path2 = new ConsumerInfo();
path2.setDestination(path1.getDestination());
path2.setConsumerId(new ConsumerId(new SessionId(new ConnectionId("conn-id-2"), 2), 4));
path2.setBrokerPath(new BrokerId[] { new BrokerId("remote-broker-id"), new BrokerId("server(2)-broker-id"), new BrokerId("server(1)-broker-id") });
path2Msg = new ActiveMQMessage();
path2Msg.setDestination(path1Msg.getDestination());
path2Msg.setDataStructure(path2);
RemoveInfo removePath1 = new RemoveInfo(path1.getConsumerId());
RemoveInfo removePath2 = new RemoveInfo(path2.getConsumerId());
removePath1Msg = new ActiveMQMessage();
removePath1Msg.setDestination(path1Msg.getDestination());
removePath1Msg.setDataStructure(removePath1);
removePath2Msg = new ActiveMQMessage();
removePath2Msg.setDestination(path1Msg.getDestination());
removePath2Msg.setDataStructure(removePath2);
}
use of org.apache.activemq.command.ConsumerInfo in project activemq-artemis by apache.
the class NetworkRouteTest method addAndRemoveSameOrder.
@Test
public void addAndRemoveSameOrder() throws Exception {
// from (1)
localBroker.request(EasyMock.isA(ConsumerInfo.class));
ArgHolder localConsumer = ArgHolder.holdArgsForLastObjectCall();
// from (2a)
remoteBroker.asyncRequest(EasyMock.isA(ActiveMQMessage.class), EasyMock.isA(ResponseCallback.class));
ArgHolder firstMessageFuture = ArgHolder.holdArgsForLastFutureRequestCall();
localBroker.oneway(EasyMock.isA(MessageAck.class));
// from (2b)
remoteBroker.asyncRequest(EasyMock.isA(ActiveMQMessage.class), EasyMock.isA(ResponseCallback.class));
ArgHolder secondMessageFuture = ArgHolder.holdArgsForLastFutureRequestCall();
localBroker.oneway(EasyMock.isA(MessageAck.class));
// from (3)
localBroker.oneway(EasyMock.isA(RemoveInfo.class));
ExpectationWaiter waitForRemove = ExpectationWaiter.waiterForLastVoidCall();
control.replay();
// (1) send advisory of path 1
remoteListener.onCommand(path1Msg);
msgDispatch.setConsumerId(((ConsumerInfo) localConsumer.arguments[0]).getConsumerId());
// send advisory of path 2, doesn't send a ConsumerInfo to localBroker
remoteListener.onCommand(path2Msg);
// (2a) send a message
localListener.onCommand(msgDispatch);
ResponseCallback callback = (ResponseCallback) firstMessageFuture.arguments[1];
FutureResponse response = new FutureResponse(callback);
response.set(new Response());
// send advisory of path 1 remove, shouldn't send a RemoveInfo to localBroker
remoteListener.onCommand(removePath1Msg);
// (2b) send a message, should send the message as in 2a
localListener.onCommand(msgDispatch);
callback = (ResponseCallback) secondMessageFuture.arguments[1];
response = new FutureResponse(callback);
response.set(new Response());
// (3) send advisory of path 1 remove, should send a RemoveInfo to localBroker
remoteListener.onCommand(removePath2Msg);
waitForRemove.assertHappens(5, TimeUnit.SECONDS);
// send a message, does not send message as in 2a
localListener.onCommand(msgDispatch);
control.verify();
}
use of org.apache.activemq.command.ConsumerInfo in project activemq-artemis by apache.
the class XARecoveryBrokerTest method testTopicPersistentPreparedAcksNotLostOnRestart.
public void testTopicPersistentPreparedAcksNotLostOnRestart() throws Exception {
ActiveMQDestination destination = new ActiveMQTopic("TryTopic");
// Setup the producer and send the message.
StubConnection connection = createConnection();
ConnectionInfo connectionInfo = createConnectionInfo();
connectionInfo.setClientId("durable");
SessionInfo sessionInfo = createSessionInfo(connectionInfo);
ProducerInfo producerInfo = createProducerInfo(sessionInfo);
connection.send(connectionInfo);
connection.send(sessionInfo);
connection.send(producerInfo);
// setup durable subs
ConsumerInfo consumerInfo = createConsumerInfo(sessionInfo, destination);
consumerInfo.setSubscriptionName("durable");
connection.send(consumerInfo);
final int numMessages = 4;
for (int i = 0; i < numMessages; i++) {
Message message = createMessage(producerInfo, destination);
message.setPersistent(true);
connection.send(message);
}
// Begin the transaction.
XATransactionId txid = createXATransaction(sessionInfo);
connection.send(createBeginTransaction(connectionInfo, txid));
final int messageCount = expectedMessageCount(numMessages, destination);
Message m = null;
for (int i = 0; i < messageCount; i++) {
m = receiveMessage(connection);
assertNotNull("unexpected null on: " + i, m);
}
// one ack with last received, mimic a beforeEnd synchronization
MessageAck ack = createAck(consumerInfo, m, messageCount, MessageAck.STANDARD_ACK_TYPE);
ack.setTransactionId(txid);
connection.send(ack);
connection.request(createPrepareTransaction(connectionInfo, txid));
// restart the broker.
restartBroker();
connection = createConnection();
connectionInfo = createConnectionInfo();
connectionInfo.setClientId("durable");
connection.send(connectionInfo);
// validate recovery
TransactionInfo recoverInfo = new TransactionInfo(connectionInfo.getConnectionId(), null, TransactionInfo.RECOVER);
DataArrayResponse dataArrayResponse = (DataArrayResponse) connection.request(recoverInfo);
assertEquals("there is a prepared tx", 1, dataArrayResponse.getData().length);
assertEquals("it matches", txid, dataArrayResponse.getData()[0]);
sessionInfo = createSessionInfo(connectionInfo);
connection.send(sessionInfo);
consumerInfo = createConsumerInfo(sessionInfo, destination);
consumerInfo.setSubscriptionName("durable");
connection.send(consumerInfo);
// no redelivery, exactly once semantics unless there is rollback
m = receiveMessage(connection);
assertNull(m);
assertNoMessagesLeft(connection);
connection.request(createCommitTransaction2Phase(connectionInfo, txid));
// validate recovery complete
dataArrayResponse = (DataArrayResponse) connection.request(recoverInfo);
assertEquals("there are no prepared tx", 0, dataArrayResponse.getData().length);
}
Aggregations