public void Publish(string topic, string key, byte[] data) { _snapshotCache.AddOrUpdate(topic, key, data); var message = NetMqMessageExtensions.CreateMessage(topic, data); _publishServer.Publish(message); }
private static void Main(string[] args) { using (NetMQContext context = NetMQContext.Create()) { ReliableServer server = new ReliableServer(context, "tcp://*:6669"); while (true) { NetMQMessage message = new NetMQMessage(); message.Append("A"); message.Append(new Random().Next().ToString()); server.Publish(message); Thread.Sleep(1000); } } }
private void ConsumeMessages() { var messageBulk = new List <byte[]>(_maxBulkSize); var lastPublish = DateTime.MinValue; var lastTopic = ""; foreach (var tuple in _buffer.GetConsumingEnumerable(_cancellationTokenSource.Token)) { if (tuple.Item2 != null) { messageBulk.Add(tuple.Item2); } var currentTopic = tuple.Item1; if (string.IsNullOrEmpty(lastTopic) && currentTopic != OnReceiveTimeoutTopic) { lastTopic = currentTopic; } var publishTopic = lastTopic; if ((DateTime.UtcNow.Subtract(lastPublish).TotalMilliseconds > _publishInterval || //publish bulk on elapsed interval messageBulk.Count == _maxBulkSize || //publish bulk on max size currentTopic != lastTopic) && //publish bulk if topic changed (cannot send different topics in same bulk + should cover also case of recieve timeout) messageBulk.Count > 0) { if (currentTopic != OnReceiveTimeoutTopic) //don't update topic if its receive timeout { lastTopic = currentTopic; } _publishServer.Publish(CreateMultipartMessage(publishTopic, messageBulk)); lastPublish = DateTime.UtcNow; messageBulk = new List <byte[]>(_maxBulkSize); } } }