1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/okok250-cornerstone

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Микросервисная архитектура: комплексное решение

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

Порядок запуска и другие примечания:

  1. Перед запуском проверьте, запущены ли redis, mysql и rabbitmq. Рекомендуется использовать docker для запуска.
  2. eureka-server --> remote-config-сервер должен быть запущен.
  3. Остальные сервисы могут быть запущены в соответствии с зависимостями.
  4. Если вам нужно использовать распределённые транзакции, пожалуйста, обязательно запустите tx-менеджер после первого шага.

Примечание:

  1. За исключением конфигурационного центра и сервера eureka, остальные сервисы используют файлы конфигурации центра конфигурации, поэтому они должны быть запущены заранее.
  2. После изменения файла конфигурации в репозитории, убедитесь, что вы отправили его, затем используйте /actuator/bus-refresh центра конфигурации для обновления конфигурации.
  3. После обновления конфигурации, если это обычный параметр, вы можете обновить его в области действия @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 и Sleuth для отслеживания цепочки вызовов

Zipkin-server используется в качестве сервиса отслеживания. В настоящее время официальный сайт не рекомендует создавать собственный zipkin-server, поэтому мы используем docker для запуска zipkin-сервера и используем официальный jar-файл для его запуска.
Этот проект не использует никаких постоянных методов записи, поэтому нет необходимости добавлять базы данных, JDBC или MQ и т. д. Конфигурации, такие как необходимость, могут быть настроены самостоятельно или добавлены позже.
Команда запуска docker: docker run -d -p 9411:9411 openzipkin/zipkin. После запуска посетите ip:9411.
Кроме того, примеры в этом проекте находятся в demo-store и demo-customer, поэтому необходимо запустить следующие проекты:

  1. eureka-server
  2. remote-config-server
  3. tx-manager
  4. oauth2-server
  5. demo-store и demo-customer

Spring-Boot-Admin-Server

Spring boot admin server используется для мониторинга в проекте, и безопасность используется для простой аутентификации входа в admin-сервер. Для отслеживаемых проектов требуется использовать зависимость spring-boot-starter-actuator, чтобы открыть некоторые отслеживаемые элементы, такие как информация и состояние здоровья, в соответствии с ситуацией. Однако, поскольку используется конфигурационный центр и шина сообщений, пожалуйста, откройте bus-refresh. Если эти элементы не открыты, то на консоли admin-сервера может появиться сообщение об ошибке при доступе к соответствующим элементам, но это не повлияет на работу.

MAIL-SERVER

Служба отправки почты настроена на QQ в качестве сервера отправки почты, и её можно настроить в соответствии с потребностями. Теперь она настроена как базовая служба, и feign используется для вызова служб между службами. Сейчас есть два примера отправки почты: один — обычный текст, другой — использование шаблона freemarker.
При использовании функции отправки почты в этом проекте необходимо заранее запустить eureka-server, config-server и oauth2-server.

FILE-SERVER

Сервис управления файлами использует fastfds и nginx в качестве файлового сервера, а затем файлы можно загружать на сервер из этого сервиса. Другие сервисы, которым необходимо загрузить файлы, должны загружаться из этого проекта. Если код загружается, используйте feign для ссылки на интерфейс этого сервиса.
Примечание: необходимо настроить трекер и адрес nginx. При использовании клиента feign необходимо использовать его расширение jar, feign-form и feign-form-spring, обратите внимание на совместимость версий.

Очередь сообщений

RabbitMQ используется для реализации очередей сообщений в проекте springboot2.x+. Поддерживаются режимы Direct, Topic и Fanout. Конфигурация находится в RabbitConfig, которую можно настроить по мере необходимости. Пример производителя можно найти в demo-store; потребительский пример находится в demo-customer.

Elasticsearch

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:

  1. Запустите ELK и откройте порты 5601 (страница Kibana), 9200 (порт ES) и 5044 (интерфейс Logstash).
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -itd  --name elk sebp/elk
  1. Войдите в bash 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}"        //указать индекс (необязательно)
    }
}
  1. Выйдите и перезапустите ELK.

Обратите внимание, что в logback.xml необязательно настраивать appname вместе с index => "%{appname}". Это делается для удобства поиска по _index в ELK и может быть настроено по вашему усмотрению.

Последующие планы

Планируется реализовать следующие функции микросервиса:

  • увеличить распределённую блокировку Redis;
  • добавить распределённые транзакции;
  • внедрить запланированные задачи;
  • создать очередь сообщений;
  • реализовать отслеживание ссылок;
  • обеспечить мониторинг сервисов;
  • разработать сервис управления файлами;
  • запустить службу электронной почты;
  • завершить настройку системы ELK;
  • подготовить документацию;
  • интегрировать с Docker.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/okok250-cornerstone.git
git@api.gitlife.ru:oschina-mirror/okok250-cornerstone.git
oschina-mirror
okok250-cornerstone
okok250-cornerstone
master