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

相关推荐
sbjdhjd2 小时前
云安全 | 从特权容器到旧版 runC:Docker 宿主机访问与运行时缺陷复盘
运维·网络安全·docker·云原生·kubernetes·云计算·云安全
蜡笔婧萱13 小时前
Docker介绍及其基础简介(一)
云原生·eureka
sbjdhjd18 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
热爱Liunx的丘丘人18 小时前
1、什么是K8s
云原生·容器·kubernetes
openFuyao2 天前
新增Agent沙箱调度能力!openFuyao v26.09社区发行版上线,AI原生基础设施能力进一步升级
云原生·ai-native·ai推理·openfuyao·多样化算力集群软件
阿里云云原生2 天前
云效工作项智能优化:先澄清,再开工
云原生
阿里云云原生2 天前
阿里云日志服务 SLS 全新升级,打造 Agent 时代的智能数据引擎
云原生
阿里云云原生2 天前
从“治已病”到“治未病”:浩瀚能源与阿里云共建充电补能异地双活高可用体系实践
云原生
wzq11_6662 天前
kubernetes集群——灰度发布
云原生·容器·kubernetes