eureka部署及openFeign的使用

一、Eureka Server 的安装与配置

1.创建SpringBoot项目

使用Spring Initializr创建项目,选择Spring Boot版本(如2.5.x)并添加依赖:

  • Spring Web(构建Web应用)
  • Eureka Server(服务端支持)

2.pom.xml添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

 

3.yum文件配置

eureka:
  instance:
    hostname: zjl.test.pc3
    lease-renewal-interval-in-seconds: 5 # 心跳检测时间
    lease-expiration-duration-in-seconds: 6 # 项目续约时间
    prefer-ip-address: false #service-url为域名时,这里要配置为false
  server:
    enable-self-preservation: false #关闭自我保护机制,保证服务能及时踢出
  client:
    register-with-eureka: true # false 表示不向注册中心注册自己
    fetch-registry: true  # false 表示自己是注册中心,职责是维护服务实例,不去检索服务
    service-url:
      defaultZone: http://zjleureka:eurekapwd@zjl.test.pc1:8761/eureka,http://zjleureka:eurekapwd@zjl.test.pc2:8761/eureka,http://zjleureka:eurekapwd@zjl.test.pc3:8761/eureka
  • eureka启动三个节点,三个节点互相注册,实现高可用。
  • defaultZone 配置全部三个节点的信息
  • hostname 为当前节点的hostname 与 defaultZone里的域名是一样的。
  • prefer-ip-address 设置为false,因为defaultZone里使用的是域名而不是IP
  • register-with-eureka: true  集群必须要设置为true 否则会出现unavilable-replicas 问题
  • fetch-registry: true  集群必须要设置为true 否则会出现unavilable-replicas 问题

4.启动类配置

@SpringBootApplication
@EnableEurekaServer
public class ZjleurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZjleurekaApplication.class, args);
    }

}
  • 添加@EnableEurekaServer 配置

 

二、Eureka Client 配置

1.pom.xml添加客户端依赖

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 这两个依赖是必须的
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>
  • spring-cloud-dependencies 这个Mannagement可以统一管理引入的springCloud版本号

2.主启动类上开启Eureka客户端

@SpringBootApplication
@EnableEurekaClient
public class MsOrderServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(MsOrderServiceApplication.class, args);
    }

}

3.yml文件配置

server:
  port: 9002
spring:
  application:
    name: zjl-test-order-service
eureka:
  client:
    service-url:
      defaultZone: http://zjleureka:eurekapwd@zjl.test.pc1:8761/eureka,http://zjleureka:eurekapwd@zjl.test.pc2:8761/eureka,http://zjleureka:eurekapwd@zjl.test.pc3:8761/eureka

  • 配置项目名称
  • 配置eureka集群,三个节点,并且添加用户名密码

4.查看Eureka面板是否注册成功

clipboard_2025-07-20_18-47

 

三、服务发现与调用

1.使用RestTemplate调用服务

1.1.启用负载均衡

@Configuration
public class ZjlConfigRagions {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

1.2.调用其他服务

@RequestMapping("doTest")
@ResponseBody
public String doTest() {
    String url = "http://zjl-test-order-service/order/createOrder";
    ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
    return JSON.toJSONString(forEntity);
}
  • 可以通过服务名称的形式调用成功

2.使用openFeign调用服务

2.1.服务提供方

引入feign的jar包

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-openfeign-core</artifactId>
</dependency>

写RMI接口

@FeignClient(name = "zjl-test-order-service")
public interface OrderRMI {
/**
* 创建订单
*/
@RequestMapping(value = "/order/createOrder", method = RequestMethod.POST)
    OrderVo createOrder(@RequestBody OrderParam orderParam);
}

2.1.服务调用方

引入Feign的相关jar包,包括服务提供方写的接口JAR包

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-openfeign-core</artifactId>
</dependency>
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-core</artifactId>
    <version>11.8</version> <!-- 使用最新版本 -->
</dependency>
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-slf4j</artifactId>
    <version>10.12</version> <!-- 使用最新版本,或者适合你项目的版本 -->
</dependency>
<dependency>
    <groupId>com.zjl.test.order</groupId>
    <artifactId>ms-order-interface</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>


直接以本地方法的形式调用

@Controller
public class Test {
    @Autowired
    private OrderRMI orderRMI;

    @RequestMapping("doTest")
    @ResponseBody
    public String doTest() {
        OrderVo orderVo = orderRMI.createOrder(new OrderParam());
        UUID uuid = UUID.randomUUID();
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(date) + "--" + uuid + JSON.toJSONString(orderVo);
    }
}

整理自https://blog.csdn.net/bjzhang75/article/details/146864172

posted @ 2025-07-20 21:43  pk.com.cn  阅读(14)  评论(0)    收藏  举报