Случай входа в микросервис SpringCloud

Прежде всего, нам нужно понять, какова его функция, чтобы обеспечить взаимный вызов интерфейсов между разными микросервисами.
Пожалуйста, добавьте описание изображения

сервисный звонок

1. Запустите регистрационный центр Nacos.

1. Загрузка и установка Nacos
Адрес загрузки: https://github.com/alibaba/nacos/releases 2. Ссылка на
Nacos при запуске Windows : https://github.com/alibaba/nacos Распаковка: распакуйте загруженный сжатый пакет и запустите: start.cmd -m автономный 3. Посетите http://localhost:8848/nacos.




Имя пользователя и пароль: nacos/nacos

2. Обнаружение услуг

Сначала мы создаем проект SpringBoot.
1. Вводим зависимости и
настраиваем зависимости клиента Nacos в модуле service-base.

<!--服务发现-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2. Добавьте информацию о конфигурации сервиса.
Поместите микросервисы, которые необходимо зарегистрировать в центре регистрации, в файл конфигурации и добавьте конфигурацию (человечно говоря, добавьте ее в файл конфигурации каждого микросервиса, чтобы зарегистрировать его в сервисе nacos) #spring
:
Cloud :
nacos:
Discovery:
server-addr: localhost:8848 # адрес службы nacos
3. Запустите микросервисы
Запустите зарегистрированные микросервисы, отметьте «управление сервисами => список сервисов», вы увидите зарегистрированные микросервисы
вставьте сюда описание изображения

3. Внедрение OpenFeign на потребительскую сторону

Настройте зависимости OpenFeign в модуле service-base (на самом деле зависимости OpenFeign необходимы на стороне потребителя сервиса)

<!--服务调用-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2. Добавьте аннотации к классу запуска.
Добавьте следующие аннотации к классу запуска service-sms, указывающие, что мне можно позвонить удаленно.

@EnableFeignClients

В-четвертых, удаленный вызов интерфейса

Добавить удаленный вызов в service-sms
// @FeignClient(value = "service-core") указывает, какую службу я вызываю, значением является имя службы
1, CoreUserInfoClient

@FeignClient(value = "service-core")
public interface CoreUserInfoClient {
    
    

    @GetMapping("/api/core/userInfo/checkMobile/{mobile}")
    boolean checkMobile(@PathVariable String mobile);
}

Пять, контроль тайм-аута

Тайм-аут соединения openfeign по умолчанию составляет 1 секунду, и во время теста может возникнуть ошибка тайм-аута удаленного вызова.
В файл конфигурации можно добавить следующую конфигурацию:
feign:
client:
config:
default:
connectTimeout: 10000 #Конфигурация таймаута соединения
readTimeout: 600000 #Выполнить конфигурацию таймаута

6. Может быть служба удаленных звонков, которая сгорела (сервер внезапно зависает, а я все равно хочу позвонить по этому интерфейсу)

Мы принимаем процесс слияния и понижения версии. Если есть служба удаленных вызовов, она сливается. Мы создаем класс реализации в этой службе, который не обрабатывает интерфейс, и возвращает данные пользователю для запроса. Гарантировано, в случае что доступ к удаленному интерфейсу недоступен. Я также могу получить доступ к локальному интерфейсу в разделе

Первый шаг — ввести зависимости в сервисах, требующих удаленных вызовов.

<!--服务容错-->
<dependency>
    <groupId>com.alibaba.cloud</groupId> 
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

2. Включите поддержку Sentinel.
Включите поддержку Feign для Sentinel в файле конфигурации yml service-sms.

#开启FeignSentinel的支持
#feign:
  sentinel:
    enabled: true

3. Создать отказоустойчивый класс // Если интерфейс удаленного вызова выйдет из строя, я вызову локальный интерфейс и передам пользовательские данные

@Service
@Slf4j
public class CoreUserInfoClientFallback implements CoreUserInfoClient {
    
    
    @Override
    public boolean checkMobile(String mobile) {
    
    
        log.error("远程调用失败,服务熔断");
        return false;
    }
}

4. Укажите класс Fuse.
Добавьте значение резервного атрибута для интерфейса удаленного вызова OpenFeign без указания класса отказоустойчивости.

@FeignClient(value = "service-core", fallback = CoreUserInfoClientFallback.class)
public interface CoreUserInfoClient {
    
    

сервисный шлюз

Прежде всего, давайте поговорим о его функции: я могу получить доступ к URL-адресу одного и того же порта и получить доступ к интерфейсу разных серверов.

Пожалуйста, добавьте описание изображения

1. Создайте модуль сервис-шлюза.

Создайте общий модуль maven.
Артефакт: сервис-шлюз.
2. Настройте pom.
Добавьте следующие зависимости в pom api-gateway.

<dependencies>
    <!-- 网关 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <!--服务注册-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>

3. Настройте файл application.yml.

server:
  port: 80 # 服务端口

spring:
  profiles:
    active: dev # 环境设置
  application:
    name: service-gateway # 服务名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
    gateway:
      discovery:
        locator:
          enabled: true # gateway可以发现nacos中的微服务,并自动生成转发路由

4. Создайте стартап-класс

@EnableDiscoveryClient указывает, что это микрослужба шлюза.

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceGatewayApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(ServiceGatewayApplication.class, args);
    }
}

5. Проверьте автоматическую маршрутизацию и переадресацию.


Правило Http://localhost/service-core/admin/core/integralGrade/list :
http://Gateway_HOST:Gateway_PORT/serviceId/**
. Когда мы не хотим снова вызывать, мы используем описанный выше метод по умолчанию для доступа к шлюз. Мы можем сделать это ниже. Настройте маршрутизацию самостоятельно.

2. Конфигурация маршрутизации

1.
Добавьте конфигурацию маршрутизации в файл базовой конфигурации application.yml.

#spring:
# cloud:
#   gateway:
      routes:
      - id: service-core
        uri: lb://service-core
        predicates:
        - Path=/*/core/**
      - id: service-sms
        uri: lb://service-sms
        predicates:
        - Path=/*/sms/**
      - id: service-oss
        uri: lb://service-oss
        predicates:
        - Path=/*/oss/**

2. Тестовая переадресация маршрута
http://localhost/admin/core/integralGrade/list.

В конфигурации шлюза возникнет междоменная проблема, а @CrossOrigin находится в конфликте, поэтому он не может решить междоменную проблему.
Давайте решим эту проблему.

3. Междоменная конфигурация

Добавьте междоменную конфигурацию в API-шлюз.

@Configuration
public class CorsConfig {
    
    
    @Bean
    public CorsWebFilter corsFilter() {
    
    
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true); //是否允许携带cookie
        config.addAllowedOrigin("*"); //可接受的域,是一个具体域名或者*(代表任意域名)
        config.addAllowedHeader("*"); //允许携带的头
        config.addAllowedMethod("*"); //允许访问的方式

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);

        return new CorsWebFilter(source);
    }
}

2. Удалите междоменную конфигурацию серверной части.
Удалите междоменную аннотацию @CrossOrigin в микросервисе.

Je suppose que tu aimes

Origine blog.csdn.net/qq_50319351/article/details/128595427
conseillé
Classement