Микросервисная архитектура: комплексное решение
config-repo: репозиторий конфигурационных файлов
Используется в качестве центра конфигурации для микросервисов.
base-service: отдельный проект
Проект | Назначение | Версия |
---|---|---|
base-common | Базовый набор инструментов | 1.0-SNAPSHOT |
cms-project | Независимый проект CMS | 1.0-SNAPSHOT |
base-oauth2-rc | Объединение компонентов конфигурации oauth2 client и resource-server | 1.0-SNAPSHOT |
base-security | Независимая конфигурация безопасности | 1.0-SNAPSHOT |
base-cloud | Базовые зависимости микросервиса | 1.0-SNAPSHOT |
base-quartz | Инструменты, связанные с quartz | 1.0-SNAPSHOT |
base-elasticsearch | Компоненты es | 1.0-SNAPSHOT |
base-jpa-guide | Простой демонстрационный пример jpa | 1.0-SNAPSHOT |
Примечание: base-cloud — это набор зависимостей, который включает некоторые простые общие конфигурации, а также следующие зависимости: некоторые из них можно использовать без настройки, просто импортировав spring boot и cloud, другие требуют аннотаций, настроек или конфигурации javabean.
Помимо автоматически подключаемых компонентов, если необходимо использовать классы конфигурации здесь, их следует импортировать в соответствии со способом использования классов конфигурации.
Локальный пакет инструментов:
base-common
Зависимости микросервисных сервисов начинаются:
spring-cloud-starter-netflix-hystrix
spring-cloud-starter-netflix-eureka-client
spring-boot-starter-web
spring-boot-starter-test
Динамическое обновление конфигурации клиента spring config:
spring-cloud-config-client
spring-cloud-bus
spring-cloud-stream-binder-rabbit
spring-boot-starter-actuator
lombok:
lombok
swagger:
swagger-bootstrap-ui
springfox-swagger2
Распределённая блокировка:
redisson
Зависимости микросервисного сервиса заканчиваются
Распределённые транзакции:
txlcn-tc
txlcn-txmsg-netty
micro-service: базовая служба микросервиса
Среда проекта: spring boot 2.0.3.RELEASE, spring cloud Finchley.SR1, jdk8+, mysql5.5+, rabbitmq, redis, lcn
Тип службы | Проект | Назначение | Версия |
---|---|---|---|
Базовая служба | eureka-server | Сервер регистрации eureka | 1.0-SNAPSHOT |
Базовая служба | remote-config-server | Единый центр конфигурации | 1.0-SNAPSHOT |
Базовая служба | gateway-server | Шлюз | 1.0-SNAPSHOT |
Базовая служба | oauth2-server | Центр аутентификации и авторизации | 1.0-SNAPSHOT |
Базовая служба | tx-manager | LCN менеджер распределённых транзакций | 1.0-SNAPSHOT |
Базовая служба | admin-server | Spring boot admin server | 1.0-SNAPSHOT |
Базовая служба | mail-server | Служба отправки почты | 1.0-SNAPSHOT |
Базовая служба | file-server | Сервис управления файлами | 1.0-SNAPSHOT |
------ | ------ | ------ | ------ |
Бизнес-служба | demo-store | Магазин demo | 1.0-SNAPSHOT |
Бизнес-служба | demo-customer | Клиент demo | 1.0-SNAPSHOT |
Бизнес-служба | demo-quartz1 | Сервис задач с планированием 1 | 1.0-SNAPSHOT |
Бизнес-служба | demo-quartz2 | Сервис задач с планированием 2 | 1.0-SNAPSHOT |
Порядок запуска и другие примечания:
Примечание:
/actuator/bus-refresh
центра конфигурации для обновления конфигурации.@RefreshScope
, если это что-то вроде номера порта, вам необходимо перезапустить соответствующий сервис.Для распределённых транзакций используется технология LCN. Если она вам нужна, добавьте зависимости txlcn-tc
и txlcn-txmsg-netty
в репозиторий и аннотируйте @EnableDistributedTransaction
в классе запуска, чтобы активировать LCN.
Затем, чтобы гарантировать, что эта операция использует LCN, добавьте аннотацию @LcnTransaction
к методу начала транзакции.
В распределённом планировании используется кварц и springcloud. При запуске добавьте зависимость base-quartz
в репозиторий, а затем аннотируйте @EnableQuartz
в классе запуска.
Конкретные задачи планирования должны наследовать класс BaseJob
и реализовывать его метод option()
, который содержит атрибуты group
, jobName
, jobClassName
и cron
.
Задачи планирования можно динамически изменять с помощью QuartzManager.
Обратите внимание, что в текущей конфигурации по неизвестным причинам при запуске задачи планирования не добавляются автоматически в базу данных, поэтому используется прослушиватель QuartzListener для обеспечения добавления всех соответствующих задач при запуске.
Кроме того, задачи планирования кластера и задачи планирования отдельных проектов не конфликтуют друг с другом, и для одиночных задач планирования можно использовать способ springboot. Пожалуйста, обратитесь к примерам кода в demo-quartz1
и demo-quartz2
.
Zipkin-server используется в качестве сервиса отслеживания. В настоящее время официальный сайт не рекомендует создавать собственный zipkin-server, поэтому мы используем docker для запуска zipkin-сервера и используем официальный jar-файл для его запуска.
Этот проект не использует никаких постоянных методов записи, поэтому нет необходимости добавлять базы данных, JDBC или MQ и т. д. Конфигурации, такие как необходимость, могут быть настроены самостоятельно или добавлены позже.
Команда запуска docker: docker run -d -p 9411:9411 openzipkin/zipkin
. После запуска посетите ip:9411
.
Кроме того, примеры в этом проекте находятся в demo-store
и demo-customer
, поэтому необходимо запустить следующие проекты:
eureka-server
remote-config-server
tx-manager
oauth2-server
demo-store
и demo-customer
Spring boot admin server используется для мониторинга в проекте, и безопасность используется для простой аутентификации входа в admin-сервер. Для отслеживаемых проектов требуется использовать зависимость spring-boot-starter-actuator
, чтобы открыть некоторые отслеживаемые элементы, такие как информация и состояние здоровья, в соответствии с ситуацией. Однако, поскольку используется конфигурационный центр и шина сообщений, пожалуйста, откройте bus-refresh
. Если эти элементы не открыты, то на консоли admin-сервера может появиться сообщение об ошибке при доступе к соответствующим элементам, но это не повлияет на работу.
Служба отправки почты настроена на QQ в качестве сервера отправки почты, и её можно настроить в соответствии с потребностями. Теперь она настроена как базовая служба, и feign используется для вызова служб между службами. Сейчас есть два примера отправки почты: один — обычный текст, другой — использование шаблона freemarker.
При использовании функции отправки почты в этом проекте необходимо заранее запустить eureka-server
, config-server
и oauth2-server
.
Сервис управления файлами использует fastfds и nginx в качестве файлового сервера, а затем файлы можно загружать на сервер из этого сервиса. Другие сервисы, которым необходимо загрузить файлы, должны загружаться из этого проекта. Если код загружается, используйте feign для ссылки на интерфейс этого сервиса.
Примечание: необходимо настроить трекер и адрес nginx. При использовании клиента feign необходимо использовать его расширение jar, feign-form
и feign-form-spring
, обратите внимание на совместимость версий.
RabbitMQ используется для реализации очередей сообщений в проекте springboot2.x+. Поддерживаются режимы Direct, Topic и Fanout. Конфигурация находится в RabbitConfig, которую можно настроить по мере необходимости. Пример производителя можно найти в demo-store; потребительский пример находится в demo-customer.
Java интегрирует es в трёх режимах. Официально было чётко указано, что ES 7.0 версия: отказ от TransportClient
В версии 7.0 будет прекращена поддержка TransportClient. В проекте этот метод не используется.
Вместо него предлагается использовать spring-data-elastixsearch — второй способ реализации на основе springData. Рекомендуемые сочетания версий:
spring data elasticsearch | elasticsearch |
---|---|
3.1.x | 6.2.2 |
3.0.x | 5.5.0 |
2.1.x | 2.4.0 |
2.0.x | 2.2.0 |
1.3.x | 1.5.2 |
Этот способ интеграции прост и подходит для простых бизнес-процессов. Он уже используется в проекте.
Третий способ — использование Rest client, который является официальным и рекомендованным. Его реализация будет добавлена позже.
ELK
Для анализа логов можно использовать систему ELK, построенную с помощью docker на базе sebp/elk. После установки необходимо внести небольшие изменения в docker и добавить зависимость logstash-logback-encoder в проект. Также нужно настроить конфигурацию logstash в файле logback.xml. Это позволит отправлять логи в ELK.
Вот простые шаги по установке ELK:
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -itd --name elk sebp/elk
docker exec -it elk /bin/bash
cd /etc/logstash/conf.d
vim 02-beats-input.conf
Измените содержимое файла следующим образом:
input{
tcp {
port => 5044 //указать номер порта logstash
codec => json_lines //указать формат json
}
}
output{
elasticsearch {
hosts => ["localhost:9200"] //указать адрес es
index => "%{appname}" //указать индекс (необязательно)
}
}
Обратите внимание, что в logback.xml необязательно настраивать appname вместе с index => "%{appname}". Это делается для удобства поиска по _index в ELK и может быть настроено по вашему усмотрению.
Последующие планы
Планируется реализовать следующие функции микросервиса:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )