public QueueDeclareOk QueueDeclare(string queue) { var msg = new AdministrationMessage(MessageType.QueueDeclare, queue); _comm.SendAdministrationMessage(msg); return(new QueueDeclareOk(queue, 0, 0)); }
public void BasicConsume(string queue, IBasicConsumer consumer) { var msg = new AdministrationMessage(MessageType.Subscribe, queue); _comm.SendAdministrationMessage(msg); consumers.Add(new Tuple <IBasicConsumer, string>(consumer, queue)); }
public void SendAdministrationMessage(AdministrationMessage msg, string ip, int port) { var client = GetClient(ip, port); var package = new Packet(Setup.Port) { SeqNo = GetOutGoingSeqNo(ip, port), Type = PacketType.AdminitrationMessages, AdministrationMessage = msg }; _guranteedDelivery.Send(new ExtendedPacketInformation(package, UdpMessageType.Packet, client.Ip, client.Port)); if (!Setup.NoDelayedAckClients.Contains(client.Id)) { _schedular.TryScheduleDelayedAck(Setup.DelayedAckWaitTime, client.Id, SendDelayedAck); } }
private void SendAntiEntropyMessage() { foreach (var broker in _brokers.Where(x => x.Active)) { var numberOfBytesUsed = 0; var tentativeMessagesToSend = _antiEntropy.GetTentativeMessagesToSendForNonPrimaryBroker(ref numberOfBytesUsed, _currentAntiEntropyRound); // + 1 because LastCommittedSeqNumberReceived represent the last received, and that number of message should not be resend var comittedMessagesToSend = _antiEntropy.GetCommittedMessagesToSend(ref numberOfBytesUsed, broker.LastCommittedSeqNumberReceived + 1); if (comittedMessagesToSend.Any()) { broker.LastCommittedSeqNumberReceived = comittedMessagesToSend.Last().Packet.GlobalSequenceNumber.Value; } broker.AntiEntropyRoundScheduledTaskIdAnswer = Guid.NewGuid(); Console.WriteLine("Committed Messages " + comittedMessagesToSend.Count); Console.WriteLine("Tentative Messages " + tentativeMessagesToSend.Count); var administrationMessage = new AdministrationMessage(MessageType.AntiEntropy, MessagePackSerializer.Serialize(new AntiEntropyMessage { PrimaryNumber = _jsonConfigurator.GetSettings().PrimaryNumber, Tentative = tentativeMessagesToSend, Committed = comittedMessagesToSend, Publishers = _antiEntropy.GetPublishers(), Subscribers = _antiEntropy.GetSubscribers(), AntiEntropyRound = _currentAntiEntropyRound, Primary = _isPrimary ? _jsonConfigurator.GetSettings().PrimaryNumber : 0, AntiEntropyGarbageCollect = _currentAntiEntropyRound % 3 == 0 // GC every third round })); _udpCommunication.SendAdministrationMessage(administrationMessage, broker.Ipadress, broker.Port); Console.WriteLine("Time: " + _clock.ElapsedTimeSpan()); //TODO: activate this later on //_schedular.ScheduleTask(Setup.Settings.AntiEntropyMilliseonds, broker.AntiEntropyRoundScheduledTaskIdAnswer, () => //{ // broker.DeactivateBroker(); // //Todo: Broadcast to subs/pubs/brokers that a broker is down //}); } }
public void SendAdministrationMessage(AdministrationMessage msg, string ip, int port) { _automaticRepeatReqeust.SendAdministrationMessage(msg, ip, port); }
public void SendAdministrationMessage(AdministrationMessage msg) { _automaticRepeatReqeust.SendAdministrationMessage(msg, _ip, _port); }