@Override public long getTotalMessageCount() { long total = 0; for (Binding binding : postOffice.getAllBindings().values()) { if (binding.getType() == BindingType.LOCAL_QUEUE) { total += ((LocalQueueBinding) binding).getQueue().getMessageCount(); } } return total; }
@Override public String toString() { return "LocalQueueBinding [address=" + address + ", queue=" + queue + ", filter=" + getFilter() + ", name=" + name + ", clusterName=" + clusterName + "]"; }
@Override public void actMessage(Transaction tx, MessageReference ref) throws Exception { String originalMessageAddress = ref.getMessage().getAnnotationString(Message.HDR_ORIGINAL_ADDRESS); String originalMessageQueue = ref.getMessage().getAnnotationString(Message.HDR_ORIGINAL_QUEUE); if (originalMessageAddress != null) { incDelivering(ref); Long targetQueue = null; if (originalMessageQueue != null && !originalMessageQueue.equals(originalMessageAddress)) { targetQueue = queues.get(originalMessageQueue); if (targetQueue == null) { Binding binding = postOffice.getBinding(SimpleString.toSimpleString(originalMessageQueue)); if (binding != null && binding instanceof LocalQueueBinding) { targetQueue = ((LocalQueueBinding) binding).getID(); queues.put(originalMessageQueue, targetQueue); } } } if (targetQueue != null) { move(SimpleString.toSimpleString(originalMessageAddress), tx, ref, false, false, targetQueue.longValue()); } else { move(SimpleString.toSimpleString(originalMessageAddress), tx, ref, false, false); } refRemoved(ref); } } });
server.getExecutorFactory().getExecutor(), server, null); LocalQueueBinding binding = new LocalQueueBinding(queue.getAddress(), queue, server.getNodeID());
@Override public void routeWithAck(Message message, RoutingContext context) throws Exception { if (isMatchRoutingType(context)) { queue.routeWithAck(message, context); } }
@Test public void testScaleDownWithMissingAnycastQueue() throws Exception { final int TEST_SIZE = 2; final String addressName = "testAddress"; final String queueName1 = "testQueue1"; final String queueName2 = "testQueue2"; // create 2 queues on each node mapped to the same address createQueue(0, addressName, queueName2, null, false, null, null, RoutingType.ANYCAST); // send messages to node 0 send(0, addressName, TEST_SIZE, false, null); // trigger scaleDown from node 0 to node 1 servers[0].stop(); Assert.assertEquals(((QueueImpl)((LocalQueueBinding) servers[1].getPostOffice().getBinding(new SimpleString(queueName2))).getBindable()).getRoutingType(), RoutingType.ANYCAST); // get the 1 message from queue 2 addConsumer(0, 1, queueName2, null); ClientMessage clientMessage = consumers[0].getConsumer().receive(250); Assert.assertNotNull(clientMessage); clientMessage.acknowledge(); }
final QueueBinding localQueueBinding = new LocalQueueBinding(queue.getAddress(), queue, nodeManager.getNodeId());
@Override public void route(final Message message, final RoutingContext context) throws Exception { if (isMatchRoutingType(context)) { queue.route(message, context); } }
@Override public long getTotalMessagesAdded() { long total = 0; for (Binding binding : postOffice.getAllBindings().values()) { if (binding.getType() == BindingType.LOCAL_QUEUE) { total += ((LocalQueueBinding) binding).getQueue().getMessagesAdded(); } } return total; }
final Binding binding = new LocalQueueBinding(queue.getAddress(), queue, nodeManager.getNodeId());
@Override public long getTotalMessagesAcknowledged() { long total = 0; for (Binding binding : postOffice.getAllBindings().values()) { if (binding.getType() == BindingType.LOCAL_QUEUE) { total += ((LocalQueueBinding) binding).getQueue().getMessagesAcknowledged(); } } return total; }
/** * This would force a journal duplication on bindings even with the scenario that generated fixed, * the server shouldn't hold of from starting * * @throws Exception */ @Test public void testForceDuplicationOnBindings() throws Exception { queue = server.createQueue(QUEUE, RoutingType.ANYCAST, QUEUE, null, true, false); ClientSessionFactory factory = locator.createSessionFactory(); ClientSession session = factory.createSession(false, false, false); ClientProducer producer = session.createProducer(QUEUE); producer.send(session.createMessage(true)); session.commit(); long queueID = server.getStorageManager().generateID(); long txID = server.getStorageManager().generateID(); // Forcing a situation where the server would unexpectedly create a duplicated queue. The server should still start normally LocalQueueBinding newBinding = new LocalQueueBinding(QUEUE, new QueueImpl(queueID, QUEUE, QUEUE, null, null, true, false, false, null, null, null, null, null, null, null), server.getNodeID()); server.getStorageManager().addQueueBinding(txID, newBinding); server.getStorageManager().commitBindings(txID); server.stop(); // a duplicate binding would impede the server from starting server.start(); waitForServerToStart(server); server.stop(); }
@Override public long getTotalConsumerCount() { long total = 0; for (Binding binding : postOffice.getAllBindings().values()) { if (binding.getType() == BindingType.LOCAL_QUEUE) { total += ((LocalQueueBinding) binding).getQueue().getConsumerCount(); } } return total; }
public int getQueueCountForUser(String username) throws Exception { Map<SimpleString, Binding> bindings = postOffice.getAllBindings(); int queuesForUser = 0; for (Binding binding : bindings.values()) { if (binding instanceof LocalQueueBinding && ((LocalQueueBinding) binding).getQueue().getUser().equals(SimpleString.toSimpleString(username))) { queuesForUser++; } } return queuesForUser; }
protected List<Queue> getQueues(final String address) throws Exception { final List<Queue> queues = new ArrayList<>(); for (Binding binding : server.getPostOffice().getDirectBindings(SimpleString.toSimpleString(address)) .getBindings()) { if (binding.getType() == BindingType.LOCAL_QUEUE) { LocalQueueBinding queueBinding = (LocalQueueBinding) binding; queues.add(queueBinding.getQueue()); } } return queues; }
protected boolean assertRemainingMessages(final int expected) throws Exception { String queueName = "Queue1"; Binding binding = servers.get(0).getActiveMQServer().getPostOffice().getBinding(SimpleString.toSimpleString(queueName)); if (binding != null && binding instanceof LocalQueueBinding) { ((LocalQueueBinding) binding).getQueue().flushExecutor(); } Long messageCount = null; for (int i = 0; i < 10; i++) { messageCount = servers.get(0).getMessageCountForQueue(queueName); if (messageCount.longValue() == expected) { break; } else { Thread.sleep(100); } } ProxyAssertSupport.assertEquals(expected, messageCount.intValue()); return expected == messageCount.intValue(); }
private void checkQueueEmpty(String qName) { PostOffice po = server.getPostOffice(); LocalQueueBinding binding = (LocalQueueBinding) po.getBinding(SimpleString.toSimpleString(qName)); try { //waiting for last ack to finish Thread.sleep(1000); } catch (InterruptedException e) { } assertEquals(0L, binding.getQueue().getMessageCount()); }
for (Binding binding : bindings.getBindings()) { if (binding instanceof LocalQueueBinding) { Queue queue = ((LocalQueueBinding) binding).getQueue();
if (!key.toString().equals(topic.getAddress())) { foundStrayRoutingBinding = true; assertEquals(0, ((LocalQueueBinding) routingNames.get(key).get(0)).getQueue().getMessageCount());
for (Binding binding : postOffice.getMatchingBindings(SimpleString.toSimpleString(address)).getBindings()) { if (binding instanceof LocalQueueBinding) { Queue queue = ((LocalQueueBinding) binding).getQueue(); for (Consumer consumer : queue.getConsumers()) { if (consumer instanceof ServerConsumer) {