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和EurekaClient
zwei Kategorien unterteilt
EurekaServer(服务端)
: Kann Dienstregistrierungsinformationen aufzeichnen (einschließlich Dienstname und zugehöriger Instanzadresse) und alle Dienst-Heartbeats überwachenEurekaClient(客户端)
: Anbieter (Dienstleister) und Verbraucher (Dienstleistungskonsument)
服务提供者与消费者
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
服务注册
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
Schritt 4: Sehen Sie sich die auf dem Eureka-Server registrierten Dienste und alle zugehörigen Instanzen an
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 in
order-service模块
OrderService类中的queryOrderById方法
使用服务名(userservice)代替服务实例的ip和端口
- Spring hilft uns automatisch dabei, die entsprechende Instanzadressliste basierend auf dem Dienstnamen vom Eureka-Server abzurufen
userservice
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;
}