В архитектуре микросервисов связь между сервисами имеет решающее значение для создания масштабируемых и отказоустойчивых систем. Одним из популярных подходов к обеспечению асинхронной связи является использование архитектур, управляемых событиями. Концентраторы событий — компонент, предоставляемый Azure, — это мощная служба обмена сообщениями, которая упрощает реализацию шаблонов, управляемых событиями, в архитектуре микросервисов. В этой статье мы углубимся в Центры событий, изучим его ключевые функции и обсудим несколько методов его использования в приложениях микросервисов.
Что такое концентраторы событий.
Концентраторы событий — это масштабируемая и полностью управляемая платформа потоковой передачи событий, предлагаемая Microsoft Azure. Он предоставляет централизованную службу приема событий, которая может обрабатывать огромные объемы данных в реальном времени из различных источников. Центры событий действуют как распределенный журнал, обеспечивая разделение связи между микросервисами и упрощая архитектуру, управляемую событиями.
Методы использования концентраторов событий в архитектуре микросервисов:
- Публикация событий.
Чтобы публиковать события в концентраторе событий, необходимо создать клиент концентратора событий и использовать его для отправки событий. Вот пример использования Azure SDK для.NET:
using Azure.Messaging.EventHubs;
using Azure.Messaging.EventHubs.Producer;
string connectionString = "<Event Hubs connection string>";
string eventHubName = "<Event Hub name>";
await using (var producerClient = new EventHubProducerClient(connectionString, eventHubName))
{
using EventDataBatch eventBatch = await producerClient.CreateBatchAsync();
eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes("Event 1")));
eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes("Event 2")));
await producerClient.SendAsync(eventBatch);
}
- Использование событий.
Чтобы получать события из концентратора событий, вы можете создать группу потребителей и использовать ее для получения событий. Вот пример использования Azure SDK для Java:
import com.azure.messaging.eventhubs.*;
import com.azure.messaging.eventhubs.models.*;
String connectionString = "<Event Hubs connection string>";
String eventHubName = "<Event Hub name>";
String consumerGroup = "<Consumer group name>";
EventProcessorClientBuilder builder = new EventProcessorClientBuilder()
.connectionString(connectionString, eventHubName)
.consumerGroup(consumerGroup)
.processEvent(eventContext -> {
EventData event = eventContext.getEventData();
System.out.println("Received event: " + event.getBodyAsString());
eventContext.updateCheckpoint();
});
EventProcessorClient eventProcessorClient = builder.buildEventProcessorClient();
eventProcessorClient.start();
- Секционирование и масштабирование.
Концентраторы событий поддерживают секционирование, которое позволяет разделить поток событий на несколько контейнеров хранения. Это обеспечивает горизонтальное масштабирование и повышает пропускную способность. Каждая группа потребителей может одновременно читать данные из одного или нескольких разделов. Вы можете использовать классPartitionReceiver
для получения событий из определенных разделов.
from azure.eventhub import EventHubConsumerClient
connection_str = "<Event Hubs connection string>"
eventhub_name = "<Event Hub name>"
consumer_group = "<Consumer group name>"
partition_id = "<Partition ID>"
client = EventHubConsumerClient.from_connection_string(
conn_str=connection_str,
consumer_group=consumer_group,
eventhub_name=eventhub_name
)
def on_event(partition_context, event):
print("Received event: ", event.body_as_str())
partition_context.update_checkpoint(event)
client.receive(
on_event=on_event,
starting_position="-1",
partition_id=partition_id
)
Концентраторы событий — это ценный компонент архитектуры микросервисов, позволяющий реализовать шаблоны взаимодействия, управляемые событиями. Используя Центры событий, вы можете обеспечить масштабируемую и несвязанную связь между службами, упрощая разработку отказоустойчивых и гибких приложений микросервисов. Включение концентраторов событий в архитектуру микросервисов позволяет создавать быстродействующие и слабосвязанные системы, способные обрабатывать большие объемы данных в режиме реального времени.