Это pet-проект, на котором я изучал работу с микросервисами, rabbitMQ, redis и многими другими мелкими тонкостями.
Что нужно установить:
github.com/rabbitmq/amqp091-goДля работы в Go с RabbitMQgithub.com/redis/go-redis/v9Для работы в Go с Redis- Развернуть redis и rebbitMQ (Я делал это с помощью контейнеров Docker)
Как запустить:
go run .\cmd\api\start.api.go- Для запуска части сервера, которая слушает Apigo run .\cmd\consumer\start.consumer.go- Для запуска части сервера, которая являеться consumer- Развернуть redis и rebbitMQ (Я делал это с помощью контейнеров Docker)
Общая архитектура проекта:
BigGoal
│ go.mod
│ go.sum
│ README.md
│
├───api
│ api.go
│
├───cmd
│ ├───api
│ │ start.api.go
│ │
│ └───consumer
│ start.consumer.go
│
├───config
│ config.go
│
├───consumer
│ consumer.go
│
├───producer
│ producer.go
│
└───redis
redis.go
Если говорить про Api:
Сервер прослушивает http://localhost:3000 с такими путями:
/ping- Отсылает в ответ Pong (Для проверки состояния сервера)/receive- Увеличивает счетчик полученных сообщений на 1 (Для работы с redis)/sent- Увеличивает счетчик отправленных сообщений на 1 (Также для работы с redis)/api/v1/receive/messages/hello- Показывает текущее количество полученных сервером сообщений/api/v1/sent/messages/hello- Показывает текущее количество отправленных сервером сообщений
Если говорить про Consumer и Producer:
Consumer:
- Подключался к RabbitMQ по данным взятым из config.go
- Начинал прослушку поступающих в очередь сообщений
- При получении нового сообщения:
- Проверял наличие типа hello в сообщении
- При успешном прохождении проверки кидал запрос в redis на увелечения счётчика полученных сообщений
- Вызывал Producer с ответным сообщением
Producer:
- Подключался к RabbitMQ по данным взятым из config.go
- При вызове:
- Отправлял сообщение с типом hello в нужную очередь
- При успешной отправке кидал запрос в redis на увелечения счётчика отправленных сообщений