Please don't ask why, I'm doing what I'm told. I am sending a Message from Azure Service bus. I am looking to consume this message using Mass Transit. I am am able to consume messages from Mass Transit using Azure Service Bus but not the other way around. I am able to send and receive message using Mass Transit only easily but not from Azure Service Bus to Mass Transit. Does anyone know how I can achive this?
Here is my implementation:
Azure Service Bus Send Message:
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);
In Mass Transit to consume the message:
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);
});
}
This is the consumer that I am looking to consume the message, I have tried the object I am using and the Azure Service Bus Object Message
public class SBConsumer : Consumes<Message>.All
{
public void Consume(Message message)
{
AzureProcessor.DoSomethingWithOurMessage(message);
}
}
I've also tried this one:
public class Consumer : Consumes<MainMessage>.All
{
public void Consume(MainMessage message)
{
Processor.DoSomethingWithOurMessage(message, 0);
}
}