Mass Transit - 是否可以使用Azure Service总线中的消息?

时间:2018-03-12 15:19:17

标签: c# azure servicebus masstransit

请不要问为什么,我正在做我所说的。 我正在从Azure Service总线发送消息。我希望使用Mass Transit消费此消息。我可以使用Azure Service Bus从Mass Transit使用消息,但不是相反。 我只能轻松地使用Mass Transit发送和接收消息,但不能从Azure Service Bus到Mass Transit。 有谁知道我怎么能做到这一点?

这是我的实施:

Azure Service Bus发送消息:

.container::before,
.container::after {
    display: table;
    content: " ";
    clear: both;
}

在Mass Transit消费消息:

  queueClient = new QueueClient("Endpoint=sb:", AzureQueueName);

    var murrr = new MainMessage()
                        {
                            ConsignmentReference = DateTime.Now.Ticks.ToString(),
                            CustomerId = "MOOOOOOOOOOOOOOOOOO",
                            OtherProperty = 123,
                            WantMeToFail = false,

                        };

                        var json = JsonConvert.SerializeObject(murrr);
                        var message2 = new Message(Encoding.UTF8.GetBytes(json));


                        // Send the message to the queue
                        await queueClient.SendAsync(message2);

这是我希望使用该消息的消费者,我已经尝试了我正在使用的对象和Azure Service Bus对象消息

  var bus = CreateAzureBus(ConfigurationManager.AppSettings["AzureQueueName"], ConfigurationManager.AppSettings["AzureNamespace"], ConfigurationManager.AppSettings["AzureKey"], ConfigurationManager.AppSettings["AzureKeyName"], configurator =>
            {
                configurator.Subscribe(s =>
                {
                    s.Consumer<Consumer>().Permanent();
                    s.Consumer<RetryConsumer>().Permanent();
                    s.Consumer<SBConsumer>().Permanent();  

                });

                configurator.SetCreateMissingQueues(true);
            });


    private static IServiceBus CreateAzureBus(string azureQueueName, string azureNamespace, string azureKey,
            string azureKeyName, Action<ServiceBusConfigurator> config = null)
        {
            var queueUrl = $"azure-sb://{azureNamespace}/{azureQueueName}";
            return ServiceBusFactory.New(x =>
            {
                x.UseAzureServiceBus(r => r.ConfigureNamespace(azureNamespace, h =>
                {
                    h.SetKey(azureKey);
                    h.SetKeyName(azureKeyName);
                }));

                x.ReceiveFrom(queueUrl);
                x.UseJsonSerializer();

                x.UseAzureServiceBusRouting();
                x.SetCreateMissingQueues(true);

                config?.Invoke(x);
            });
        }

我也试过这个:

 public class SBConsumer : Consumes<Message>.All
    {
        public void Consume(Message message)
        {
            AzureProcessor.DoSomethingWithOurMessage(message);
        }
    }

1 个答案:

答案 0 :(得分:0)

MassTransit具有特定的消息格式,消息解串器需要该格式。

http://masstransit-project.com/MassTransit/advanced/interoperability.html

如果您想要使用任意消息,您需要编写自己的反序列化器。