Этот проект представляет собой модернизацию системы, объединяющей Sentinel и Dubbo.
Sentinel — это продукт с открытым исходным кодом от команды промежуточного программного обеспечения Alibaba, ориентированный на распределённую архитектуру сервисов. Он предлагает облегчённое решение для контроля трафика, которое помогает защитить стабильность сервисов, фокусируясь на таких аспектах, как контроль трафика, разрыв цепи и защита от перегрузки системы. Для получения дополнительной информации о Sentinel посетите следующий адрес: https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5.
Клиент использует модуль sentinel-transport-simple-http для предоставления определённого порта. Панель управления Sentinel отправляет данные через HTTP, а клиент сохраняет правила в локальной памяти после их получения.
Клиенты регистрируются в соответствующем центре регистрации. Панель управления Sentinel направляет конфигурацию в центр конфигурации, такой как Nacos или Zookeeper, который затем распространяет конфигурацию.
DynamicRuleZookeeperProvider
DynamicRuleZookeeperPublisher
sentinel.application.name=sentinel-dashboard # Имя
sentinel.application.port=8719 # Порт доступа к sentinel через HTTP
sentinel.application.dashboard=localhost:8181 # Адрес панели управления
sentinel.api.enable=false # Включить отправку API, выберите false для распространения через Zookeeper или Nacos (выберите один из двух)
sentinel.zookeeper.enable=true # Включить Zookeeper в качестве источника данных
sentinel.zookeeper.address=localhost:2181 # Конфигурация Zookeeper
sentinel.nacos.enable=false # Включить Nacos в качестве источника данных
sentinel.nacos.server_addr=localhost:8888 # Адрес Nacos
sentinel.nacos.group_id=DEFAULT_GROUP # Группа разделения, по умолчанию SENTINEL_GROUP, если не задано
Настройте и запустите DashboardApplication.
<dependency>
<groupId>com.xmutca</groupId>
<artifactId>sentinel-dubbo-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
Добавьте соответствующую конфигурацию на стороне клиента
sentinel:
application:
name: sentinel-provider # Имя сервиса
port: 8719 # Доступ к порту sentinel через http
dashboard: localhost:8080 # Адрес панели управления sentinel
zookeeper:
enable: true # Использовать zookeeper в качестве источника данных
address: localhost:2181 # Конфигурация zookeeper
nacos:
enable: false # Включить nacos в качестве источника данных
server_addr: localhost:8888 # Адрес nacos
group_id: DEFAULT_GROUP # Разделительная группа, по умолчанию SENTINEL_GROUP
Проект использует рефлексию для получения всех зарегистрированных исключений и реализует обработку исключений аналогично SpringMVC.
/**
* @version Revision: 0.0.1
* @author: weihuang.peng
* @Date: 2018-12-24
*/
public class ExceptionHandler {
/**
* Обработка по умолчанию
* @param ex
* @return
*/
@ExceptionProcessor(Exception.class)
public Result handleException(Exception ex) {
return Result.DEFAULT_ERROR_RESULT;
}
/**
* Бизнес-обработка исключений
* @param ex
* @return
*/
@ExceptionProcessor({ServiceException.class})
public Result handleServiceException(ServiceException ex) {
Receipt result = ex.getExceptionResult();
result.setMessage("Проектная реализация -》" + result.getMessage());
return result;
}
}
Затем зарегистрируйте исключения следующим образом:
ExceptionRegistry.updateForPackage("Имя пакета, где находятся исключения")
Обратите внимание, что обработчики исключений, зарегистрированные позже, будут переопределять обработчики, зарегистрированные ранее. Порядок переопределения определяется значением класса в аннотации ExceptionProcessor. Если исключение не найдено, будет выполнен поиск родительского исключения рекурсивно, и если родительское исключение также не найдено, будет использовано значение по умолчанию.
На самом деле, в Sentinel можно было бы использовать метод прямого выброса исключений для решения проблемы 1, а затем исключить бизнес-исключения в реализации SentinelResourceAspect. Однако этот подход не был выбран, поскольку он может быть слишком грубым и недружелюбным, особенно учитывая, что Dubbo также может предоставлять услуги напрямую (например, dubbo2.js). Для работы с datasource в клиенте Sentinel требуется соответствующая поддержка в консоли. Например, чтобы получить нужную конфигурацию, необходимо однозначное соответствие пути zookeeper. В связи с этим была также обновлена версия dashboard.
Обработка исключений во внешних сервисах проекта: если исключение выбрасывается при вызове через dubbo, то оно упаковывается с помощью фильтра dubbo. Если же проект был интегрирован с веб-сервисом и исключение возникает в http-сервисе, то для соответствующей обработки исключений можно использовать ControllerAdvice.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )