Адрес фактического проекта электронной коммерции SpringBoot (20k+star):GitHub.com/macro-positive/…
Резюме
Spring Cloud Eureka — один из основных компонентов подпроекта Spring Cloud Netflix, который в основном используется для управления услугами в микросервисной архитектуре. В этой статье рассказывается о создании центра регистрации Eureka, создании клиента Eureka, создании кластера Eureka и добавлении аутентификации при входе в центр регистрации Eureka.
Введение в Эврику
В микросервисной архитектуре часто используется реестр.Каждый микросервис регистрирует в реестре свой собственный адрес и информацию о порте.Реестр поддерживает соответствие между именами сервисов и экземплярами сервисов. Каждая микрослужба будет периодически получать список служб из реестра и сообщать о своем собственном рабочем состоянии, чтобы, когда некоторым службам необходимо вызвать другие службы, они могли получить адрес экземпляра из списка служб, полученного ими самими, и совершать вызовы. , Это служба регистрации и механизма обнаружения.
Создайте реестр Eureka
Здесь мы создаем и запускаем реестр Eureka, чтобы увидеть правильное положение для создания и запуска приложений Spring Cloud в IDEA.
Используйте IDEA для создания приложений SpringCloud
- Создайте модуль eureka-server и инициализируйте проект SpringBoot с помощью Spring Initializer.
- Заполните информацию о приложении
- Выберите компоненты SpringCloud, которые необходимо создать.
- После завершения создания вы обнаружите, что зависимость eureka-server уже существует в файле pom.xml.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
- Добавьте аннотацию @EnableEurekaServer в класс запуска, чтобы включить функцию реестра Euerka.
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
- Добавьте конфигурацию реестра Eureka в файл конфигурации application.yml
server:
port: 8001 #指定运行端口
spring:
application:
name: eureka-server #指定服务名称
eureka:
instance:
hostname: localhost #指定主机地址
client:
fetch-registry: false #指定是否要从注册中心获取服务(注册中心不需要开启)
register-with-eureka: false #指定是否要注册到注册中心(注册中心不需要开启)
server:
enable-self-preservation: false #关闭保护模式
Используйте панель запуска IDEA для запуска приложений SpringCloud
На данный момент служба создана, щелкните основной метод класса запуска для запуска. Но в микросервисном проекте мы запустим много сервисов.Для простоты управления мы используем для запуска IDEA's Run Dashboard.
- Откройте панель запуска.По умолчанию, когда IDEA обнаружит, что в вашем проекте есть приложение SpringBoot, вам будет предложено открыть его.Если вы еще не открыли его, вы можете использовать следующий метод, чтобы открыть его.
- Запустите приложение SpringCloud
- Адрес доступа после запускаhttp://localhost:8001/Вы можете увидеть интерфейс реестра Eureka
Собрать клиент Eureka
- Создайте новый модуль eureka-client и добавьте следующие зависимости в pom.xml.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- Добавьте аннотацию @EnableDiscoveryClient в класс запуска, чтобы указать, что это клиент Eureka.
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
- Добавьте конфигурацию клиента Eureka в файл конфигурации application.yml
server:
port: 8101 #运行端口号
spring:
application:
name: eureka-client #服务名称
eureka:
client:
register-with-eureka: true #注册到Eureka的注册中心
fetch-registry: true #获取注册实例列表
service-url:
defaultZone: http://localhost:8001/eureka/ #配置注册中心地址
- запустить эврика-клиент
- Просмотр реестраhttp://localhost:8001/Обнаружено, что клиент Eureka успешно зарегистрирован
Построить кластер реестра Eureka
Создайте два реестра
Поскольку все сервисы будут зарегистрированы в реестре, вызовы между сервисами будут вызываться через список сервисов, полученный из реестра.После того, как реестр не работает, все вызовы сервисов будут иметь проблемы. Поэтому нам нужно несколько реестров для формирования кластера для предоставления услуг.Далее мы построим кластер реестра с двумя узлами.
- Добавьте файл конфигурации application-replica1.yml в eureka-sever для настройки первого реестра.
server:
port: 8002
spring:
application:
name: eureka-server
eureka:
instance:
hostname: replica1
client:
serviceUrl:
defaultZone: http://replica2:8003/eureka/ #注册到另一个Eureka注册中心
fetch-registry: true
register-with-eureka: true
- Добавьте файл конфигурации application-replica2.yml в eureka-sever для настройки второго реестра.
server:
port: 8003
spring:
application:
name: eureka-server
eureka:
instance:
hostname: replica2
client:
serviceUrl:
defaultZone: http://replica1:8002/eureka/ #注册到另一个Eureka注册中心
fetch-registry: true
register-with-eureka: true
Здесь мы регистрируемся друг у друга через два центра регистрации, и строим двухузловой кластер центра регистрации.Поскольку defaultZone использует доменное имя, его нужно настроить в файле хоста этой машины.
- Изменить локальный файл хоста
127.0.0.1 replica1
127.0.0.1 replica2
Запуск кластера реестра Eureka
В IDEA мы можем запустить одно и то же приложение SpringBoot, используя разные файлы конфигурации.
- Добавьте две конфигурации для запуска eureka-server с application-replica1.yml и application-replica2.yml соответственно.
Скопируйте один из исходной конфигурации загрузки
Настройте файл конфигурации запуска
- Запустите два eureka-сервера и получите доступ к одному из реестров.http://replica1:8002/найти еще один, который стал его резервной копией
- Модифицировать Eureka-client для подключения к кластеру
Добавьте файл конфигурации eureka-client application-replica.yml, чтобы зарегистрировать его одновременно в двух реестрах.
server:
port: 8102
spring:
application:
name: eureka-client
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://replica1:8002/eureka/,http://replica2:8003/eureka/ #同时注册到两个注册中心
После запуска с этим файлом конфигурации вы можете увидеть eureka-client, обратившись к любому узлу реестра.
Добавить аутентификацию в реестр Eureka
Создайте модуль eureka-security-server и добавьте следующие зависимости в pom.xml.
Необходимо добавить модуль SpringSecurity.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Добавьте файл конфигурации application.yml
В основном настройте имя пользователя и пароль для входа в центр регистрации.
server:
port: 8004
spring:
application:
name: eureka-security-server
security: #配置SpringSecurity登录用户名和密码
user:
name: macro
password: 123456
eureka:
instance:
hostname: localhost
client:
fetch-registry: false
register-with-eureka: false
Добавить конфигурацию Java WebSecurityConfig
По умолчанию приложения, которые добавляют зависимости Spring Security, должны добавлять токен CSRF для доступа к каждому запросу.Клиент Eureka не будет добавлен при его регистрации, поэтому путь /eureka/** необходимо настроить без токена CSRF.
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().ignoringAntMatchers("/eureka/**");
super.configure(http);
}
}
Запустите eureka-security-server, получите доступhttp://localhost:8004Обнаружено, что требуется аутентификация входа
eureka-client регистрируется в центре регистрации с аутентификацией входа
- Формат адреса регистрационного центра нужно изменить в конфигурационном файле
http://${username}:${password}@${hostname}:${port}/eureka/
- Добавьте файл конфигурации application-security.yml и измените имя пользователя и пароль в соответствии с форматом
server:
port: 8103
spring:
application:
name: eureka-client
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://macro:123456@localhost:8004/eureka/
- Запустите eureka-client с конфигурацией application-security.yml, вы увидите, что eureka-client успешно зарегистрирован в интерфейсе реестра.
Общая конфигурация Эврики
eureka:
client: #eureka客户端配置
register-with-eureka: true #是否将自己注册到eureka服务端上去
fetch-registry: true #是否获取eureka服务端上注册的服务列表
service-url:
defaultZone: http://localhost:8001/eureka/ # 指定注册中心地址
enabled: true # 启用eureka客户端
registry-fetch-interval-seconds: 30 #定义去eureka服务端获取服务列表的时间间隔
instance: #eureka客户端实例配置
lease-renewal-interval-in-seconds: 30 #定义服务多久去注册中心续约
lease-expiration-duration-in-seconds: 90 #定义服务多久不去续约认为服务失效
metadata-map:
zone: jiangsu #所在区域
hostname: localhost #服务主机名称
prefer-ip-address: false #是否优先使用ip来作为主机名
server: #eureka服务端配置
enable-self-preservation: false #关闭eureka服务端的保护机制
используемые модули
springcloud-learning
├── eureka-server -- eureka注册中心
├── eureka-security-server -- 带登录认证的eureka注册中心
└── eureka-client -- eureka客户端
Адрес исходного кода проекта
публика
проект торгового центраПолный набор учебных пособий сериализуется,Обратите внимание на общедоступный номерПолучите это прямо сейчас.