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,通过控制台输出查看调用情况

相关推荐
阿里云云原生5 小时前
零配置部署顶级模型!函数计算一键解锁 Qwen3.5
云原生
AI攻城狮8 小时前
Kimi Bot + OpenClaw 完整配置指南:5 步实现本地 AI Agent 集成
人工智能·云原生·aigc
AI攻城狮1 天前
RAG Chunking 为什么这么难?5 大挑战 + 最佳实践指南
人工智能·云原生·aigc
哈里谢顿3 天前
Kubernetes Operator核心概念、实现原理和实战开发
云原生
阿里云云原生3 天前
你的 OpenClaw 真的在受控运行吗?
云原生
阿里云云原生3 天前
5 分钟零代码改造,让 Go 应用自动获得全链路可观测能力
云原生·go
Shanyoufusu123 天前
RKE2 单节点集群安装 Rancher+ 私有镜像仓库搭建 完整教程
云原生
阿里云云原生3 天前
Dify 官方上架 Higress 插件,轻松接入 AI 网关访问模型服务
云原生
AI攻城狮3 天前
OpenClaw Session 管理完全指南:Context 压缩、重置与持久化
人工智能·云原生·aigc
阿里云云原生7 天前
阿里云获评 Agentic AI 开发平台领导者,函数计算 AgentRun 赢下关键分!
云原生