public void Can_consume_messages_from_RabbitMQ_with_BasicGet() { RabbitMqConfig.UsingChannel(channel => { PublishHelloRabbit(channel); while (true) { var basicGetMsg = channel.BasicGet(MqQueueNames <HelloRabbit> .Direct, false); if (basicGetMsg == null) { Console.WriteLine("End of the road..."); return; } var msg = MqMessageExtensions.FromJsonBytes <HelloRabbit>(basicGetMsg.Body); Console.WriteLine(msg); Thread.Sleep(1000); channel.BasicAck(basicGetMsg.DeliveryTag, false); } }); }
private static void PublishHelloRabbit(IModel channel, string text = "World!") { var payload = MqMessageExtensions.ToJsonBytes(new HelloRabbit { Name = text }); var props = channel.CreateBasicProperties(); props.Persistent = true; channel.BasicPublish(_exchange, MqQueueNames <HelloRabbit> .Direct, props, payload); }
public void Can_serialize_IMqMessage_into_typed_Message() { var dto = new Incr { Value = 1 }; var iMsg = MqMessageFactory.Create(dto); var jsonBytes = MqMessageExtensions.ToJsonBytes((object)iMsg); IMqMessage <Incr> typedMessage = MqMessageExtensions.FromJsonBytes <MqMessage <Incr> >(jsonBytes); Assert.That(typedMessage.GetBody().Value, Is.EqualTo(dto.Value)); }
public virtual void Publish(string queueName, string exchange, IMqMessage message) { var props = this.Channel.CreateBasicProperties(); props.Persistent = true; props.PopulateFromMessage(message); this.PublishMessageFilter?.Invoke(queueName, props, message); var messageBytes = MqMessageExtensions.ToJsonBytes(message.Body); this.PublishMessage(exchange ?? MqQueueNames.Exchange, queueName, props, messageBytes); }
public void Can_publish_messages_to_RabbitMQ() { RabbitMqConfig.UsingChannel(channel => { for (var i1 = 0; i1 < 5; i1++) { var payload = MqMessageExtensions.ToJsonBytes(new HelloRabbit { Name = $"World! #{i1}" }); var props = channel.CreateBasicProperties(); props.Persistent = true; channel.BasicPublish(_exchange, MqQueueNames <HelloRabbit> .Direct, props, payload); Console.WriteLine("Sent Message " + i1); Thread.Sleep(1000); } }); }
public void Publishing_message_to_fanout_exchange_publishes_to_all_queues() { RabbitMqConfig.UsingChannel(channel => { channel.RegisterFanoutExchange(_exchangeFanout); RegisterQueue(channel, MqQueueNames <HelloRabbit> .Direct, _exchangeFanout); var body = MqMessageExtensions.ToJsonBytes(new HelloRabbit { Name = "World!" }); var props = channel.CreateBasicProperties(); props.Persistent = true; channel.BasicPublish(_exchangeFanout, MqQueueNames <HelloRabbit> .Direct, props, body); var basicGetMsg = channel.BasicGet(MqQueueNames <HelloRabbit> .Direct, true); Assert.That(basicGetMsg, Is.Not.Null); }); }
/// <inheritdoc /> public IMqMessage <T> GetAsync <T>(string queueName) { var bytes = this._factory.GetMessageAsync(queueName); return(MqMessageExtensions.ToMessage <T>(bytes)); }
public static IMqMessage <T> ToMessage <T>(this BasicGetResult msgResult) { if (msgResult == null) { return(null); } var props = msgResult.BasicProperties; T body; // json only if (string.IsNullOrEmpty(props.ContentType) || props.ContentType.ToLower().Contains(Const.Json)) { body = MqMessageExtensions.FromJsonBytes <T>(msgResult.Body); } else { throw new NotSupportedException("Unknown Content-Type: " + props.ContentType); } var message = new MqMessage <T>(body) { Id = props.MessageId != null?Guid.Parse(props.MessageId) : new Guid(), CreatedDate = ((int)props.Timestamp.UnixTime).FromUnixTime(), Priority = props.Priority, ReplyTo = props.ReplyTo, Tag = msgResult.DeliveryTag.ToString(), RetryAttempts = msgResult.Redelivered ? 1 : 0 }; if (props.CorrelationId != null) { message.ReplyId = Guid.Parse(props.CorrelationId); } if (props.Headers != null) { foreach (var entry in props.Headers) { if (entry.Key == nameof(IMqMessage.Error)) { var errors = entry.Value; if (errors != null) { var errorsJson = errors is byte[] errorBytes ? errorBytes.FromUtf8Bytes() : errors.ToString(); message.Error = errorsJson.FromJson <MqErrorStatus>(); } } else { if (message.Meta == null) { message.Meta = new Dictionary <string, string>(); } var value = entry.Value is byte[] bytes ? bytes.FromUtf8Bytes() : entry.Value?.ToString(); message.Meta[entry.Key] = value; } } } return(message); }