Тема-подписка
Я бы хотел расширить ответ @arnumprabhu. Если вы хотите использовать сообщения разных типов, вам следует искать модель Subscription. Таким образом, ваша публикация сообщения в теме и сервисах, на которые вы подписаны, может получить сообщение. Каждая тема может иметь много подписок, и каждая подписка может прослушивать только определенный тип сообщений или все их. например Вы публикуете 3 сообщения. Бронирование подтверждено, оплата обработана, заказ доставлен. У вас есть 3 подписки, которые могут прослушивать любое из указанных выше сообщений или все из них. Скажем, ваша подписка (скажем, имя подписки - «Отслеживание») решает прослушать 2 сообщения BookingConfirmed, PaymentProcessed. Когда сообщение публикуется в теме, ваша подписка получает копию этих сообщений
Функция Azure
Ваша функция Azure может подписаться на подписку (отслеживание) и прослушивать только те сообщения, которые поступили в этой подписке. На очень высоком уровне это может выглядеть примерно так.
[FunctionName("myfunction")]
public static async void Run([ServiceBusTrigger("topicName", "Subscriptionname", Connection = "ServiceBus")]Message serviceBusMessage, ILogger log)
{
EventStore eS = new EventStore();
await eS.UpdateData(serviceBusMessage);
// log.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}");
}
public class EventStore
{
public async Task UpdateData(Message msg)
{
try
{
if (msg.Label == "BookingAdd")
{
BookingAddIntegrationEvent eventMsg = JsonConvert.DeserializeObject<BookingAddIntegrationEvent>(Encoding.UTF8.GetString(msg.Body));
string messageType = "BookingCreated";
BookingCreated bookingCreated = new
BookingCreated(eventMsg.BookingId, string.Empty, eventMsg.Id
, messageType, eventMsg.CreationDate, eventMsg.Origin, eventMsg.Destination);
bookingId = eventMsg.BookingId;
tracking.BookingAdd(bookingCreated);
}
else if (msg.Label == "OrderPicked")
{
OrderPickedIntegrationEvent eventMsg = JsonConvert.DeserializeObject<OrderPickedIntegrationEvent>(Encoding.UTF8.GetString(msg.Body));
string messageType = "OrderPicked";
OrderPicked orderPicked = new
OrderPicked(eventMsg.BookingId, eventMsg.Description, eventMsg.Id
, messageType, eventMsg.CreationDate);
bookingId = eventMsg.BookingId;
tracking.OrderPicked(orderPicked);
}
}
catch (Exception ex)
{
throw ex;
}
}
}
}