04-Detaillierte Erläuterung der Rolle des Eureka-Registrierungszentrums, der spezifischen Konfiguration, der Serviceregistrierung und der Serviceerkennung

Die Rolle des Eureka-Registrierungszentrums

Eureka架构

Zwei Probleme mit Fernanrufen

  • 服务的ip地址和端口号写死: In einer Produktionsumgebung服务的地址可能会随时发生变化 muss der Code jedes Mal geändert werden, wenn er fest codiert ist
  • 多实例问题: Bei hoher Parallelität一个服务可以有多个实例形成一个集群 und wenn zu diesem Zeitpunkt eine Hartcodierung verwendet wird, kann nur auf eine Instanzadresse des Dienstes zugegriffen werden

In der Eureka-Architektur sind Microservice-Rollen inEurekaServer和EurekaClientzwei Kategorien unterteilt

  • EurekaServer(服务端): Kann Dienstregistrierungsinformationen aufzeichnen (einschließlich Dienstname und zugehöriger Instanzadresse) und alle Dienst-Heartbeats überwachen
  • EurekaClient(客户端): Anbieter (Dienstleister) und Verbraucher (Dienstleistungskonsument)
    Fügen Sie hier eine Bildbeschreibung ein

服务提供者与消费者

Die Dienstaufrufbeziehung umfasst Dienstanbieter und Dienstkonsumenten. Die Definition dieser beiden Rollen ist nicht absolut, da在不同业务中有些服务既可以是服务提供者也可以是服务消费者

  • 服务提供者: Ein Dienst, der von anderen Microservices in einem Unternehmen aufgerufen wird (offengelegte Schnittstelle zu anderen Microservices)
  • 服务消费者: Aufrufen der Dienste anderer Microservices in einem Unternehmen (Aufrufen der von anderen Microservices bereitgestellten Schnittstellen)

服务消费者Bestimmen Sie beim Einleiten eines Fernanrufs den Ablauf von 服务提供者实例的ip地址和端口号 und achten Sie darauf服务消费者也需要把自己注册到Eureka服务端后才能使用其提供的服务

  • 第一步服务注册: Nachdem die Dienstanbieterinstanz gestartet wurde, registriert sie ihre eigenen Informationen beieureka-server(Eureka服务端)
  • 第二步服务映射:Der Eureka-Server speichert die Zuordnungsbeziehung zwischen den von allen Diensten bereitgestellten Namen und ihren entsprechenden Dienstinstanzadressen in einer Kartensammlung.
  • 第三步服务发现: Der Dienstkonsument ruft die entsprechenden Informationen basierend auf dem Namen des Dienstanbieters von eureka ab.一个服务可能有多个服务提供者所以最终会得到一个服务实例地址列表
  • 第四步负载均衡: Der Dienstkonsument wählt mithilfe des Lastausgleichsalgorithmus eine Instanzadresse aus der Instanzadressliste aus und initiiert einen Remote-Aufruf.

Wie nehmen Dienstleistungskonsumenten den Gesundheitszustand von Dienstleistungsanbietern wahr?判断服务提供者是否宕机

  • 第一步: Der Dienstanbieter sendet in regelmäßigen Abständen (Standard 30 Sekunden) Heartbeat-Anfragen an den EurekaServer-Server, um seinen Gesundheitsstatus zu melden.
  • 第二步:eureka aktualisiert die Listeninformationen des Dienstanbieters durch Überprüfen der Heartbeat-Anfrage. Wenn festgestellt wird, dass der Heartbeat abnormal ist, wird er aus der Dienstliste entfernt, sodass der Dienstkonsument die neuesten Informationen des Dienstanbieters abrufen kann.

Konfigurieren Sie das Eureka-Registrierungscenter

搭建注册中心(EurekaServer)

Der erste Schritt besteht darin, das Untermodul zu erstellen: 在父工程cloud-demo中创建子模块eureka-server und dann die von SpringCloud für Eureka bereitgestellte Starter-Server-Abhängigkeit einzuführen

<!--eureka服务端依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

Der zweite Schritt besteht darin, eine Startup-Klasse zu schreiben: Schreiben Sie eine Startup-Klasse in eureka-server模块 und fügen Sie @EnableEurekaServer注解 hinzu, sodass eureka-server服务 Hat die Funktion eines Registrierungszentrums

  • Alle Mikrodienste, einschließlich des Eureka-Server-Dienstes, gehen zum Registrierungszentrum, um ihre eigenen Informationen zu registrieren (einschließlich des Namens des Dienstes und der zugehörigen Instanzadresse).
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(EurekaApplication.class);
    }
}

Der dritte Schritt besteht darin, die Konfigurationsdatei zu schreiben: Registrieren Sie den eigenen Dienstnamen und die zugehörigen Instanzadressinformationen beim Eureka-Server-Dienst ineureka-server服务, um die Kommunikation mit anderen Eureka-Clustern zu erleichtern< /span>

server:
  port: 10086 # 服务端口
spring:
  application:
    name: eureka-server # eureka的服务名称
# eureka服务将自己的信息注册到Eureka服务端    
eureka:
  client:
    service-url: # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

Schritt 4: Starten Sie den Microservice und greifen Sie im Browser auf http://localhost:10086/ zu

Fügen Sie hier eine Bildbeschreibung ein

服务注册

Der erste Schritt besteht darin, Abhängigkeiten einzuführen: Führen Sie die Client-Abhängigkeiten von Eureka in der pom.xml-Datei von user-service,order-service模块 einspring-cloud-starter-netflix-eureka-client

<!--eureka客户端依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

Der zweite Schritt der Dienstregistrierung: Konfigurieren Sie und in application.yml von user-service,order-service模块自己的服务的名称eureka-server服务的地址信息

spring:
  application:
    name: userservice # 服务名称
# userservice服务将自己的信息注册到Eureka服务端      
eureka:
  client:
    service-url: # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka       
        
spring:
  application:
    name: orderservice # 服务名称
# orderservice将自己的信息注册到Eureka服务端    
eureka:
  client:
    service-url: # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

Der dritte Schritt simuliert die Bereitstellung mehrerer Instanzen: Kopieren Sie eine Kopie der Konfiguration von Startuser-service实例 in IDEA, setzen Sie den Namen zurück und ändern Sie die Portnummer mit den VM-Optionen-Dserver.port=8082

Fügen Sie hier eine Bildbeschreibung ein

Schritt 4: Sehen Sie sich die auf dem Eureka-Server registrierten Dienste und alle zugehörigen Instanzen an

Fügen Sie hier eine Bildbeschreibung ein

Serviceanruf

服务发现

Der erste Schritt besteht darin, Abhängigkeiten einzuführen: Serviceerkennung und Serviceregistrierung sind alle in den Clientabhängigkeiten von Eureka gekapselt. Wenn die Abhängigkeit während der Registrierung eingeführt wurde, ist es nicht erforderlich, sie erneut einzuführen.

<!--eureka客户端依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

Der zweite Schritt der Diensterkennung: Solangeorderservice服务 in eureka-server服务 registriert ist, können Sie die Instanzadressliste von < abrufen a i=3> userservice服务

  • Fügen Sie der registrierten Bean in der Startup-Klasse von orderservice模块 eine Lastausgleichsanmerkung hinzuRestTemplate@LoadBalanced
  • Im Zugriffspfad des Remote-Aufrufs inorder-service模块OrderService类中的queryOrderById方法使用服务名(userservice)代替服务实例的ip和端口
  • Spring hilft uns automatisch dabei, die entsprechende Instanzadressliste basierend auf dem Dienstnamen vom Eureka-Server abzurufenuserservice und verwendet dann den Lastausgleichsalgorithmus, um eine Instanzadresse auszuwählen und einen zu initiieren Fernanruf
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(OrderApplication.class, args);
    }

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
    
    
        return new RestTemplate();
    }
}
public Order queryOrderById(Long orderId) {
    
    
    // 1.查询订单
    Order order = orderMapper.findById(orderId);
    // 2.调用userservice服务远程查询User,使用服务的名称代替服务的IP地址和端口
    //String url = "http://localhost:8081/user/" + order.getUserId();
    String url = "http://userservice/user/" + order.getUserId();
    User user = restTemplate.getForObject(url, User.class);
    // 3.存入查询到的user对象
    order.setUser(user);
    // 4.返回
    return order;
}

Supongo que te gusta

Origin blog.csdn.net/qq_57005976/article/details/134905271
Recomendado
Clasificación