Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/milovidov983/rmqminilib
RmqMiniLib is a dotnet library for easy working with RabbitMQ, written on top of the official C # RabbitMQ.Client library
https://github.com/milovidov983/rmqminilib
dotnet rabbitmq
Last synced: about 1 month ago
JSON representation
RmqMiniLib is a dotnet library for easy working with RabbitMQ, written on top of the official C # RabbitMQ.Client library
- Host: GitHub
- URL: https://github.com/milovidov983/rmqminilib
- Owner: milovidov983
- License: mit
- Created: 2020-08-04T18:31:15.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-07-09T21:22:26.000Z (4 months ago)
- Last Synced: 2024-09-14T02:19:14.240Z (2 months ago)
- Topics: dotnet, rabbitmq
- Language: C#
- Homepage:
- Size: 285 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
### RmqMiniLib это dotnet библиотека для удобной работы с RabbitMQ написанная поверх официальной C# библиотеки RabbitMQ.Client
RmqMiniLib делает работу с шиной RabbitMQ более простой, это достигается за счет того что при вызове RPC команд или публикации собщенний от программиста убраны всевозможные инфраструктурные и технические аспекты, которые в большинстве случаев не имеют большого значения.
### Быстрый старт
#### Создание подключения и настройка конфигурацииДля использования библиотеки необходимо создать экземпляр класса `RabbitHub` в качестве параметра конструктора он приимает объект со всеми необходимыми настройками соединения с rabbitMq:
Пример настроек соединения файл settings.json:
```json
{
"RmqConfig": {
"AppId": "ClientExampleService-svc",
"HostName": "localhost",
"Password": "guest",
"Exchange": "my_exchange",
"UserName": "guest",
"Queue": "q_testQueue"
}
}
```Ниже описан сам процесс получения настроек из файла и создание экземпляра класса RabbitHub который и отвечает за все взаимодействия вашего приложения и шины:
```csharp
// Стандартные дейсвтия для получения настроек из settings.json
var builder = new ConfigurationBuilder()
.AddJsonFile("settings.json", true, true);var configuration = builder.Build();
var rmqConfigInstance = new RmqConfig();
var settingsSection = configuration.GetSection(nameof(RmqConfig));
settingsSection.Bind(rmqConfigInstance);// Создание экземпляра класса для работы с шиной
IRabbitHub hub = new RabbitHub(rmqConfigInstance);```
Если все сконфигурировано корректно то после запуска приложения библиотека сама должан подключится к шине, о чем она напишет в консоли, после этого ее можно использовать для публикации сообщений и вызовов RPC
### Пример публикации
#### Публикация сообщения всем кто подписан на topic "broadcastCommand.serverExample.none"
Создадим класс который мы хотим отправить
```csharp
class Message {
public string Body { get; set; }
}
```Отправка данных осуществляется с помощью метода `PublishAsync` класса `RabbitHub`, метод имеет следующую сигнатуру:
```csharp
Task PublishAsync(string topic, TRequest request, TimeSpan? timeout = null)
where TRequest : class;
````topic` - это ключ маршрутизации на который подписан сервис которому адресовано сообщение
`request` - тело сообщения
Пример полностью:
```csharp
IRabbitHub hub = new RabbitHub(rmqConfigInstance);
await hub.PublishAsync("broadcastCommand.serverExample.none",
new Message {
Body = "Hello world!"
}
);
```***
### RPC вызовы
#### Выполнение команд запрос/ответ с посредником rabbitMqЧто бы разобрать пример с RPC вызовом допустим у клиента и сервера к которому мы хотим послать запрос есть общий класс с описанием класса запроса и класса ответа а так же с названием топика по которому будет сделана публикация в rabbitMq. Опишем клаcс подобным образом:
```csharp
///
/// Класс "контракт" описывающий данные участвующие в клиент/серверном взаимодействии
///
public class ExampleCommand {
///
/// topic или по другому routingKey на который подписан сервер ожидающий наше сообщение
///
public const string Topic = "exampleCommand.serverExample.rpc";public class Request {
///
/// Сообщение от клиента
///
public string Message { get; set; }
}public class Response {
///
/// Ответ от сервера
///
public string Message { get; set; }
}
}```
Теперь имея на руках такой контракт который поддерживают обе стороны можно переходить к самому вызову:
Для выполнения RPC вызывов используется библиотченый метод
```csharp
Task ExecuteRpcAsync(string topic, TRequest request, TimeSpan? timeout = null)
where TResponse : class
where TRequest : class;
```
`topic` - это ключ маршрутизации на который подписан сервис которому адресовано сообщение`request` - тело сообщения
`timeout` - отрезок времени после которого будет создан эксепшн если ответа не было
```csharp
// Пример RPC вызова
var response = await hub.ExecuteRpcAsync(
ExampleCommand.Topic,
new ExampleCommand.Request {
Message = "Hello RPC!"
}
);Console.WriteLine($"Получен ответ от микросервиса: {response.Message}");
```***
### Создание подписок на топики RabbitMq
Пока нет возможности полностью описать процесс подписок, но я думаю можно без труда разобратся посмотрев на пример:
https://github.com/milovidov983/RmqMiniLib/blob/master/examples/ExampleServer/ServerExample.Service/Infrastructure/MessageQueueProcessor.cs
Пример микросервиса на основе этой библиотеки:
https://github.com/milovidov983/RmqMiniLib/tree/master/examples/ExampleServer
Пример клиента:
https://github.com/milovidov983/RmqMiniLib/blob/master/examples/ClientExampleService