Общая логика в микросервисах - PullRequest
0 голосов
/ 23 сентября 2019

мы разработали от 5 до 6 микросервисов, независимо друг от друга, имеющих собственную базу данных в соответствии с принципами микросервисов.

Теперь мы проводим рефакторинг сервисов и имеем следующую дилемму.

  1. Все микросервисы отправляют и получают сообщения от ActiveMQ.
    • сведения о конфигурации ActiveMQ (JmsListenerContainerFactory, обработчики и т. Д.) Код платы котла повторяется во всех этих службах.
  2. Все микросервисы имеют функции аудита, например: Аудит заказасоздание, обновление и удаление.- Конфигурация, связанная с логикой AOP, также повторяется во всех этих микросервисах.

Рекомендуется ли переносить эту общую логику в библиотеку или общую службу.Пожалуйста, предложите.

Спасибо,

Ответы [ 2 ]

4 голосов
/ 23 сентября 2019

Я был в той же лодке, когда начал использовать микро-сервисы на работе.

Мы определили следующие "общие" места.Этот список, конечно, не полный, но просто для того, чтобы дать представление:

  • Инфраструктура обмена сообщениями (производитель / потребитель, pub-sub), как в вашем случае
  • Измерительная инфраструктура (некоторые расширения)мы использовали для микрометра)
  • Регистрация конфигураций (одни и те же приложения, шаблоны, немного другое поведение для машин Windows / Linux / Mac OS и т. д.)
  • Расширения исполнительных механизмов пружины (дополнительные конечные точки)
  • Обработка ошибок
  • Расширения конфигурации реляционной базы данных (проверки работоспособности привода, некоторые расширения драйверов и т. Д.)

Решение, с которым мы пришлиэто предоставить другой тип артефакта с точки зрения maven.Это будет упаковочная банка и вообще не будет зависеть от пружинной загрузки (кроме необходимых частей, таких как API привода, если требуется).

Мы создали модуль maven для каждого элемента из вышеупомянутого списка, который сам по себеимел @Configuration, что смог загрузить все необходимые бины.Если вы хотите, чтобы это было решено с "автоконфигурацией", рассмотрите использование "весенних фабрик".Мы использовали этот метод, и он отлично работал для нас.В качестве альтернативы, если вы хотите быть более явным, вы можете создать аннотацию, такую ​​как @EnableXYZ, которая по существу импортирует конфигурацию модуля jar:

 @Target(ElementType.TYPE)
 @Retention(RetentionPolicy.RUNTIME)
 @Import({CommonErrorHandlingConfiguration.class})
 public @interface EnableErrorHandling {

 }

 ...

 @Configuration 
 public class CommonErrorHandlingConfiguration {
   // beans relevant for error handling appear here
 }

В этом примере есть модуль с именем common-error-handling и содержит оба вышеупомянутых класса.

Теперь ваши микро-сервисы имеют его как зависимость и могут использовать эту аннотацию @EnableErrorHandling для активации CommonErrorHandlingConfiguration

Мы такжевыяснили, что есть два вида общих библиотек, подобных этой.Что-то, что относится ко всем микросервисам (например, регистрация, измерение и т. Д.), И что-то, что может относиться к одному микросервису и совершенно не относится к другому.

Итак, в качестве решения мы сделали все наши банки типа микросервисов (с подпружиненным загрузочным плагином, интеграционным тестированием и т. д.) из одного «общего микросервиса» pom.xml, который фактически определил все эти общие зависимости.

Таким образом, не было необходимости переопределять зависимости для каждого микросервисаесли они актуальны для всех услуг.

Стоит также упомянуть, что этот подход может работать только до тех пор, пока все микросервисы используют одну и ту же технологию, в противном случае использование контейнеров-колясок может быть более подходящим для тех жеслучай.

1 голос
/ 23 сентября 2019

Как предложил @harkesh kumar, вы можете предоставить зависимости, которые могут использоваться всеми микро-сервисами в целом. Зависимость должна иметь архитектуру, обеспечивающую гибкость, чтобы различные микро-сервисы, которые принимают зависимость, могли вносить изменения в соответствии со своими потребностями..

Например, вы можете предоставить конфигурации ActiveMQ в качестве отдельной зависимости, которая будет добавлена ​​при настройке с помощью клавиш application.yml или при переопределении конфигураций вручную. Таким образом, все микро-сервисы, которые не требуют конфигурации по умолчаниюбудет иметь возможность сделать это.

Читать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...