当前位置: 首页 > article >正文

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

  1. 由于RPC调用需要使用注册中心,所以首先需要创建eureka服务,创建SpringBoot项目后导入spring-cloud-starter-netflix-eureka-server,注意SpringBoot和SpringCloud版本一致性,然后进行配置,启动类添加注解@EnableEurekaServer
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
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/
@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注解,因为在新版本中已经被移除
<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>
server:
  port: 8082

spring:
  application:
    name: producer

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

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

        System.out.println("服务提供者被调用");
        return "Hello from Producer!";
    }
}
  1. 创建服务消费者SpringBoot应用,引入如下三个关键依赖,进行eureka配置,编写接口,编写接入层代码调用该接口,启动类需要加上@EnableFeignClients
<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>
server:
  port: 8083

spring:
  application:
    name: consumer

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

    @GetMapping("/api/data")
    String getData();
}
@RestController
@RequestMapping("/consumer")
public class ConsumerController {

    @Autowired
    private ProducerClient producerClient;

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

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

}
  1. 总结
  • 通过引入eureka注册中心后,如果服务提供者有多个节点,那么请求就会被发送到存活的节点上,实现了动态路由,避免因为固定写url但是该节点宕机导致调用失败的问题
  • Feign并不是RPC(远程过程调用),本质上还是基于HTTP,就算是因为服务提供者的api.jar,调用期中的接口,也只是基于HTTP协议的调用,只是不用写HTTP客户端,一切都是组件通过动态代理生成的

http://www.kler.cn/a/401490.html

相关文章:

  • 多品牌摄像机视频平台EasyCVR视频融合平台+应急布控球:打造城市安全监控新体系
  • 英语中do(做没做)和can(有能力/资格做)的区分
  • 【GPTs】Ai-Ming:AI命理助手,个人运势与未来发展剖析
  • python画图|3D errorbars基础教程
  • 机器学习(贝叶斯算法,决策树)
  • ks 小程序sig3
  • 安全平行切面的概念以及对安全行业影响
  • 前端记录3
  • 静态成员的详细讲解
  • Spark RDD 的 combineByKey、cogroup 和 compute 算子的作用
  • 第8章硬件维护-8.2 可维护性和可靠性验收
  • 抽象java入门1.5.3.2——类的进阶(中)
  • 嵌入式C语言
  • 填写工单流程
  • CTF练习4
  • TDSQL 免密码登录
  • Openstack15--块存储服务(Cinder)安装
  • SpringCloud详解
  • 阿里云SSL证书每三个月过期续期方法 —— 使用httpsok工具轻松自动续期
  • 机器学习笔记 // 天气预报、股票价格以及历史轨迹(如摩尔定律)// 时间序列的常见属性
  • 如何在Linux系统实现屏幕旋转?触觉智能RK3568鸿蒙开发板演示
  • JavaSE(十四)——文件操作和IO
  • Jmeter数据库压测之达梦数据库的配置方法
  • Flutter 生成二维码
  • React中 setState 是同步的还是异步的?调和阶段 setState 干了什么?
  • 【图像处理识别】数据集合集!