public void MessageTransfer(IMessage m) { _range.Clear(); _range.Add(m.Id); _session.MessageAccept(_range); _buffer.Enqueue(m); }
public override void Start() { if (Options.Tx > 0) { Session.TxSelect(); Session.Sync(); } CircularBuffer<IMessage> buffer = new CircularBuffer<IMessage>(100); // Create a listener and subscribe it to the queue named "message_queue" IMessageListener listener = new SyncListener(buffer); string dest = "dest" + UUID.RandomUuid(); Session.AttachMessageListener(listener, dest); Session.MessageSubscribe(_queue, dest, Options.Tx > 0 || Options.SubAck > 0 ? MessageAcceptMode.EXPLICIT : MessageAcceptMode.NONE, MessageAcquireMode.PRE_ACQUIRED, null, 0, null); // issue credits Session.MessageSetFlowMode(dest, MessageFlowMode.WINDOW); Session.MessageFlow(dest, MessageCreditUnit.BYTE, ClientSession.MESSAGE_FLOW_MAX_BYTES); // Notify controller we are ready. IMessage message = new Message(); message.DeliveryProperties.SetRoutingKey("sub_ready"); message.AppendData(Encoding.UTF8.GetBytes("ready")); Session.MessageTransfer("amq.direct", message); if (Options.Tx > 0) { Session.TxCommit(); Session.Sync(); } for (int j = 0; j < Options.Iterations; ++j) { //need to allocate some more credit Session.MessageFlow(dest, MessageCreditUnit.MESSAGE, (long)Options.SubQuota); RangeSet range = new RangeSet(); IMessage msg; DateTime start = DateTime.Now; for (long i = 0; i < Options.SubQuota; ++i) { msg = buffer.Dequeue(); if (Options.Tx > 0 && ((i + 1)%Options.Tx == 0)) { Session.TxCommit(); Session.Sync(); } if (Options.IntervalSub > 0) { Thread.Sleep((int) Options.IntervalSub*1000); } range.Add(msg.Id); } if (Options.Tx > 0 || Options.SubAck > 0) Session.MessageAccept(range); range.Clear(); if (Options.Tx > 0) { Session.TxSelect(); Session.Sync(); } DateTime end = DateTime.Now; // Report to publisher. message.DeliveryProperties.SetRoutingKey("sub_done"); message.ClearData(); message.AppendData(BitConverter.GetBytes(Options.SubQuota / end.Subtract(start).TotalMilliseconds )); Session.MessageTransfer("amq.direct", message); if (Options.Tx > 0) { Session.TxSelect(); Session.Sync(); } } Session.Close(); }
public override void Start() { if (Options.Tx > 0) { Session.TxSelect(); Session.Sync(); } CircularBuffer <IMessage> buffer = new CircularBuffer <IMessage>(100); // Create a listener and subscribe it to the queue named "message_queue" IMessageListener listener = new SyncListener(buffer); string dest = "dest" + UUID.RandomUuid(); Session.AttachMessageListener(listener, dest); Session.MessageSubscribe(_queue, dest, Options.Tx > 0 || Options.SubAck > 0 ? MessageAcceptMode.EXPLICIT : MessageAcceptMode.NONE, MessageAcquireMode.PRE_ACQUIRED, null, 0, null); // issue credits Session.MessageSetFlowMode(dest, MessageFlowMode.WINDOW); Session.MessageFlow(dest, MessageCreditUnit.BYTE, ClientSession.MESSAGE_FLOW_MAX_BYTES); // Notify controller we are ready. IMessage message = new Message(); message.DeliveryProperties.SetRoutingKey("sub_ready"); message.AppendData(Encoding.UTF8.GetBytes("ready")); Session.MessageTransfer("amq.direct", message); if (Options.Tx > 0) { Session.TxCommit(); Session.Sync(); } for (int j = 0; j < Options.Iterations; ++j) { //need to allocate some more credit Session.MessageFlow(dest, MessageCreditUnit.MESSAGE, (long)Options.SubQuota); RangeSet range = new RangeSet(); IMessage msg; DateTime start = DateTime.Now; for (long i = 0; i < Options.SubQuota; ++i) { msg = buffer.Dequeue(); if (Options.Tx > 0 && ((i + 1) % Options.Tx == 0)) { Session.TxCommit(); Session.Sync(); } if (Options.IntervalSub > 0) { Thread.Sleep((int)Options.IntervalSub * 1000); } range.Add(msg.Id); } if (Options.Tx > 0 || Options.SubAck > 0) { Session.MessageAccept(range); } range.Clear(); if (Options.Tx > 0) { Session.TxSelect(); Session.Sync(); } DateTime end = DateTime.Now; // Report to publisher. message.DeliveryProperties.SetRoutingKey("sub_done"); message.ClearData(); message.AppendData(BitConverter.GetBytes(Options.SubQuota / end.Subtract(start).TotalMilliseconds)); Session.MessageTransfer("amq.direct", message); if (Options.Tx > 0) { Session.TxSelect(); Session.Sync(); } } Session.Close(); }