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

农民  金牌会员 | 2024-11-17 08:13:38 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 820|帖子 820|积分 2460


  • 由于RPC调用须要利用注册中心,以是首先须要创建eureka服务,创建SpringBoot项目后导入spring-cloud-starter-netflix-eureka-server,留意SpringBoot和SpringCloud版本同等性,然后举行配置,启动类添加注解@EnableEurekaServer
  1. <dependency>
  2.         <groupId>org.springframework.cloud</groupId>
  3.         <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  4. </dependency>
复制代码
  1. server:
  2.   port: 8761
  3. spring:
  4.   application:
  5.     name: eureka
  6. eureka:
  7.   client:
  8.     register-with-eureka: false # 不向Eureka注册自己
  9.     fetch-registry: false       # 不从Eureka获取注册信息
  10.   service-url:
  11.     defaultZone: http://localhost:8761/eureka/
复制代码
  1. @SpringBootApplication
  2. @EnableEurekaServer
  3. public class EurekaApplication {
  4.         public static void main(String[] args) {
  5.                 SpringApplication.run(EurekaApplication.class, args);
  6.         }
  7. }
复制代码

  • 创建服务提供者SpringBoot应用,关键是导入spring-cloud-starter-netflix-eureka-client依靠,举行eureka的配置,编写controller接入层代码,启动类不须要加@EnableEurekaClient注解,因为在新版本中已经被移除
  1. <dependency>
  2.         <groupId>org.springframework.boot</groupId>
  3.         <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6.         <groupId>org.springframework.cloud</groupId>
  7.         <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  8. </dependency>
复制代码
  1. server:
  2.   port: 8082
  3. spring:
  4.   application:
  5.     name: producer
  6. eureka:
  7.   client:
  8.     register-with-eureka: true
  9.     fetch-registry: true
  10.   service-url:
  11.     defaultZone: http://localhost:8761/eureka/
复制代码
  1. @RestController
  2. @RequestMapping("/api")
  3. public class DataController {
  4.     @GetMapping("/data")
  5.     public String getData() {
  6.         System.out.println("服务提供者被调用");
  7.         return "Hello from Producer!";
  8.     }
  9. }
复制代码

  • 创建服务消费者SpringBoot应用,引入如下三个关键依靠,举行eureka配置,编写接口,编写接入层代码调用该接口,启动类须要加上@EnableFeignClients
  1. <dependency>
  2.         <groupId>org.springframework.boot</groupId>
  3.         <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6.         <groupId>org.springframework.cloud</groupId>
  7.         <artifactId>spring-cloud-starter-openfeign</artifactId>
  8. </dependency>
  9. <dependency>
  10.         <groupId>org.springframework.cloud</groupId>
  11.         <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  12. </dependency>
复制代码
  1. server:
  2.   port: 8083
  3. spring:
  4.   application:
  5.     name: consumer
  6. eureka:
  7.   client:
  8.     register-with-eureka: true
  9.     fetch-registry: true
  10.   service-url:
  11.     defaultZone: http://localhost:8761/eureka/
复制代码
  1. @FeignClient(name = "producer") // 此处不需要写url = "http://localhost:8082",因为通过注册中心调用
  2. public interface ProducerClient {
  3.     @GetMapping("/api/data")
  4.     String getData();
  5. }
复制代码
  1. @RestController
  2. @RequestMapping("/consumer")
  3. public class ConsumerController {
  4.     @Autowired
  5.     private ProducerClient producerClient;
  6.     @GetMapping("/data")
  7.     public String getDataFromProducer() {
  8.         return producerClient.getData();
  9.     }
  10. }
复制代码
  1. @SpringBootApplication
  2. @EnableFeignClients
  3. public class ConsumerApplication {
  4.         public static void main(String[] args) {
  5.                 SpringApplication.run(ConsumerApplication.class, args);
  6.         }
  7. }
复制代码

  • 总结


  • 通过引入eureka注册中心后,如果服务提供者有多个节点,那么哀求就会被发送到存活的节点上,实现了动态路由,避免因为固定写url但是该节点宕机导致调用失败的题目

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农民

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表