使用OpenFeign+Eureka实现HTTP调用的简单示例

  1. 由于RPC调用需要使用注册中心,所以首先需要创建eureka服务,创建SpringBoot项目后导入spring-cloud-starter-netflix-eureka-server,注意SpringBoot和SpringCloud版本一致性,然后进行配置,启动类添加注解@EnableEurekaServer
xml 复制代码
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
yaml 复制代码
server:
  port: 8761

spring:
  application:
    name: eureka

eureka:
  client:
    register-with-eureka: false # 不向Eureka注册自己
    fetch-registry: false       # 不从Eureka获取注册信息
  service-url:
    defaultZone: http://localhost:8761/eureka/
java 复制代码
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

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

}
  1. 创建服务提供者SpringBoot应用,关键是导入spring-cloud-starter-netflix-eureka-client依赖,进行eureka的配置,编写controller接入层代码,启动类不需要加@EnableEurekaClient注解,因为在新版本中已经被移除
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>
yaml 复制代码
server:
  port: 8082

spring:
  application:
    name: producer

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
  service-url:
    defaultZone: http://localhost:8761/eureka/
java 复制代码
@RestController
@RequestMapping("/api")
public class DataController {

    @GetMapping("/data")
    public String getData() {

        System.out.println("服务提供者被调用");
        return "Hello from Producer!";
    }
}
  1. 创建服务消费者SpringBoot应用,引入如下三个关键依赖,进行eureka配置,编写接口,编写接入层代码调用该接口,启动类需要加上@EnableFeignClients
xml 复制代码
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
yaml 复制代码
server:
  port: 8083

spring:
  application:
    name: consumer

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
  service-url:
    defaultZone: http://localhost:8761/eureka/
java 复制代码
@FeignClient(name = "producer") // 此处不需要写url = "http://localhost:8082",因为通过注册中心调用
public interface ProducerClient {

    @GetMapping("/api/data")
    String getData();
}
java 复制代码
@RestController
@RequestMapping("/consumer")
public class ConsumerController {

    @Autowired
    private ProducerClient producerClient;

    @GetMapping("/data")
    public String getDataFromProducer() {
        return producerClient.getData();
    }
}
java 复制代码
@SpringBootApplication
@EnableFeignClients
public class ConsumerApplication {

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

}
  1. 总结
  • 通过引入eureka注册中心后,如果服务提供者有多个节点,那么请求就会被发送到存活的节点上,实现了动态路由,避免因为固定写url但是该节点宕机导致调用失败的问题
相关推荐
2401_8346369926 分钟前
保姆级 Kubernetes 部署教程|从原理到三节点集群落地
云原生·容器·kubernetes
2301_780789662 小时前
DDoS 攻击溯源:DNS 水印标记 + 区块链存证的双保险
运维·服务器·网络·云原生·ddos
全麦面包 time展天4 小时前
瀚海拾贝(一)HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】
网络协议·http·asp.net
驾驭人生11 小时前
IIS微服务5分钟自动预热守护服务
微服务·云原生·架构
godwaskillde11 小时前
Java 11 HttpClient如何配置HTTP代理?连接测试与异常处理示例
java·开发语言·http
VortMall12 小时前
VortMall 微服务商城 v1.3.13 版本更新|『会员 + 分销』功能优化,提升私域裂变经营能力
微服务·云原生·架构
爱吃蔬菜091313 小时前
一键部署K8s v1.30.14全离线解决方案
云原生·容器·kubernetes
小白说大模型14 小时前
从0开始学计算机网络:HTTP 协议的进化史
人工智能·网络协议·计算机网络·http
circuitsosk15 小时前
不止于API调用:大模型推理加速与云原生服务化部署指南
python·云原生·agent·vllm·推理加速·大模型部署·ensorrt-llm