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

相关推荐
檀越剑指大厂13 小时前
查看 Docker 镜像详情的几种常用方法
docker·容器·eureka
叫致寒吧18 小时前
zookeeper与kafka
分布式·zookeeper·云原生
HitpointNetSuite19 小时前
云原生与 AI:NetSuite 如何塑造亚太中端市场
人工智能·云原生
轩轩Aminent19 小时前
WSL 中的 Ubuntu 系统中使用 Docker
ubuntu·docker·eureka
Selegant20 小时前
Quarkus vs Spring Boot:谁更适合云原生时代的 Java 开发?
java·spring boot·云原生
2501_9399090520 小时前
Zookeeper及Kafka
分布式·zookeeper·云原生
古城小栈20 小时前
云原生安全:Falco 容器运行时监控
安全·云原生
运维行者_21 小时前
APM 性能监控是什么?从应用监控与网站监控了解基础概念
网络·数据库·云原生·容器·kubernetes·智能路由器·运维开发
乂爻yiyao21 小时前
Java 的云原生困局与破局
java·开发语言·云原生
会飞的小蛮猪1 天前
K8s-1.29.2二进制安装-第三章(Master组件安装)
云原生·容器·kubernetes