Eureka注册中心

一、搭建eureka-server

1. 创建eureka-server服务

①创建eureka-server模块
②配置pom.xml(eureka-server)
XML 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.situ.demo</groupId>
        <artifactId>cloud-demo</artifactId>
        <version>1.0</version>
    </parent>

    <groupId>com.situ.eureka</groupId>
    <artifactId>eureka-server</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>
③创建EurekaApplication.java
java 复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}
④创建配置eureka-server模块的application.yml
java 复制代码
server:
  port: 8082
⑤运行EurekaApplication.java
⑥项目结构:

2. 引入eureka依赖pom(eureka-server)

XML 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    ...
    <dependencies>
        ...
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

</project>

3. 编写启动类EurekaApplication.java

java 复制代码
...
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
...
@EnableEurekaServer
public class EurekaApplication {
    ...
}

4. 编写启动eureka-server模块的文件application.yml

java 复制代码
server:
  port: 10086
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka

5. 启动服务

二、服务注册

1. 引入依赖pom.xml(user-service)

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    ...
    <dependencies>
        ...
        <!-- Eureka客户端 -->
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
         </dependency>
    </dependencies>
    ...
</project>

2. 配置文件user-service模块的application.yml

XML 复制代码
server:
  port: 8081
spring:
  datasource:
    url: jdbc:mysql://192.168.17.128:3306/cloud_user?useSSL=false
    username: root
    password: 1234
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: userservice
mybatis:
  type-aliases-package: com.situ.user.pojo
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    com.situ: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka

3. 启动多个user-service实例

三、服务发现

1. 引入依赖pom.xml(order-servie)

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    ...
    <dependencies>
        ...
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
    ...
</project>

2. 配置文件order-service模块的application.yml

XML 复制代码
server:
  port: 8080
spring:
  ...
  application:
    name: orderservice
...
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka

3. 服务拉取和负载均衡

修改OrderService.java

java 复制代码
@Service
public class OrderService {
    ...
    public Order queryOrderById(Long orderId) {
        ...
        String url = "http://userservice/user/" + order.getUserId();
        ...
    }
}

重运行OrderApplication,清空UserApplication、UserApplication2控制台,在OrderService类中,通过String url = "http://userservice/user/" + order.getUserId();发起的 HTTP 请求,会基于Spring Cloud Netflix Eureka的服务发现机制,自动从Eureka注册中心所维护的服务实例列表里,查找服务名为userservice的可用实例(即UserApplication和UserApplication2对应的服务实例)。Eureka 会按照其内置的负载均衡策略(默认是轮询策略),为该请求分配userservice下的某一个具体服务实例,进而实现对该实例所提供的getUserId()相关功能接口的调用。

Q:java.net.UnknownHostException: userservice表明OrderApplication无法通过服务名userservice找到对应的服务实例

A: 为getRestTemplate()方法添加@LoadBalanced注解,重运行OrderApplication.java

java 复制代码
...
public class OrderApplication {
    ...
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        ...
    }
}

刷新localhost:8080/order/101,通过控制台输出查看调用情况

相关推荐
童槿顏丶6 小时前
docker自动化部署脚本
docker·eureka·自动化
阿里云云原生9 小时前
2026云栖大会定档!
云原生
人间凡尔赛10 小时前
eBPF + WebAssembly 正在重写服务网格数据平面:2026 云原生架构的“去 Sidecar“革命
后端·云原生·架构
云烟成雨TD11 小时前
Micrometer 系列【33】Spring Boot Micrometer Metrics 自动配置模块解析
spring boot·云原生·micrometer
SLD_Allen14 小时前
Kubernetes + Ray + Volcano:云原生AI训练调度体系
人工智能·云原生·kubernetes
A-刘晨阳15 小时前
Kubernetes 非共享存储详解:emptyDir 与 hostPath 从入门到实践
运维·云原生·容器·kubernetes·hostpath·emptydir
风曦Kisaki15 小时前
# Kubernetes(K8s)笔记Day15:K8s网络工作原理【Pod 网络模型,CNI 网络插件,Calico 工作模式详解,BGP协议,路由反射器】
运维·网络·nginx·云原生·容器·kubernetes
明王明王16 小时前
从零搭建一个单节点 K8S 可观测实验室(七):从一次 Pod 创建过程,看懂 Kubernetes 核心原理
云原生·容器·kubernetes
云川之下1 天前
【k8s】NAD(NetworkAttachmentDefinition)与SR‑IOV‑Operator 关系
云原生·容器·kubernetes
潘正翔1 天前
k8s进阶_Configmap配置文件访问
运维·服务器·docker·云原生·容器·kubernetes