Spring boot2X Consul如何使用Feign实现服务调用

作者:慕尘 时间:2022-04-29 14:41:18 

这篇文章主要介绍了spring boot2X Consul如何使用Feign实现服务调用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

服务调用有两种方式:

A.使用RestTemplate 进行服务调用

B.使用Feign 进行声明式服务调用

上一次写了使用RestTemplate的方式,这次使用Feign的方式实现

服务注册发现中心使用Consul

启动Consul


consul agent -dev

spring boot 版本 2.2.1.RELEASE

1.服务端

provider

(1)添加依赖


<properties>
 <java.version>1.8</java.version>
 <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
</properties>

<dependencies>
 <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
 </dependency>

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-consul-discovery</artifactId>
 </dependency>
</dependencies>

<dependencyManagement>
 <dependencies>
   <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>

(2)修改配置


server.port=8010

spring.application.name=provider
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.health-check-path=/actuator/health
spring.cloud.consul.discovery.service-name=service-provider
spring.cloud.consul.discovery.heartbeat.enabled=true

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

(3)测试方法


package com.xyz.provider.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class demoController {
 @RequestMapping("/hello")
 public String Hello(){
   return "hello,provider";
 }

}

provider1

修改端口为8011

修改测试方法


package com.xyz.provider1.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class demoController {
 @RequestMapping("/hello")
 public String Hello(){
   return "hello,another provider";
 }
}

启动provider和provider1

2.客户端

customer

(1)添加依赖


<properties>
  <java.version>1.8</java.version>
  <spring-cloud.version>Greenwich.SR4</spring-cloud.version>
</properties>
<dependencies>
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-consul-discovery</artifactId>
   </dependency>
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-openfeign</artifactId>
   </dependency>
</dependencies>

<dependencyManagement>
   <dependencies>
     <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>

(2)配置


server.port=8015
spring.application.name=xyz-comsumer
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.register=false
spring.cloud.consul.discovery.health-check-url=/actuator/health
spring.cloud.consul.discovery.heartbeat.enabled=true
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

(3)修改启动类

添加注解 @EnableFeignClients,开启扫描Spring Cloud Feign客户端的功能


package com.xyz.comsumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@EnableFeignClients
@SpringBootApplication
public class ComsumerApplication {
 public static void main(String[] args) {
   SpringApplication.run(ComsumerApplication.class, args);
 }
}

(4)添加Feign接口

添加注解@FeignClient(name = "provider")

provider是要调用的服务名

说明:

添加跟调用目标方法一样的方法声明,必须跟目标方法的定义一致


package com.xyz.consumer.controller;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "provider")
public interface ProviderService {
 @RequestMapping("/hello")
 public String hello();
}

(4)服务调用

注入刚才声明的ProviderService,就可以像本地方法一样进行调用了


package com.xyz.consumer.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class FeignController {
 @Autowired
 private ProviderService providerService;
 @RequestMapping("/call")
 public String call() {
   return providerService.hello();
 }
}

启动customer

访问http://localhost:8015/call

交替返回结果

hello,provider 或 hello,another provider

来源:https://www.cnblogs.com/baby123/p/11964567.html

标签:spring,boot,consul,feign,服务,调用
0
投稿

猜你喜欢

  • Java日常练习题,每天进步一点点(51)

    2022-07-03 14:40:12
  • Android DataBinding的官方双向绑定示例

    2023-09-15 04:39:27
  • 安卓11适配攻略抢先看

    2022-05-22 22:39:05
  • 浅析Java自定义注解的用法

    2022-06-08 01:52:58
  • Android自定义ImageView实现自动放大缩小动画

    2021-11-07 12:24:48
  • 浅谈c#开发者应该了解的15个特性

    2022-03-02 17:14:32
  • java操作Apache druid的实例代码

    2023-12-24 02:10:58
  • C#备忘录人生存档的设计模式实例

    2022-06-15 12:40:38
  • Android 根据手势顶部View自动展示与隐藏效果

    2022-01-11 07:30:20
  • mybatis-plus 扩展批量新增的实现

    2023-07-14 14:24:13
  • SpringBoot和Vue.js实现的前后端分离的用户权限管理系统

    2023-09-03 14:37:33
  • Android 自定义按钮点击事件和长按事件对比

    2023-06-04 00:57:14
  • Android下拉列表选项框及指示箭头动画

    2022-09-28 04:08:15
  • Android屏幕旋转 处理Activity与AsyncTask的最佳解决方案

    2023-03-22 07:02:50
  • Spring IOC与DI核心重点分析

    2023-11-12 14:35:55
  • SpringMVC 向jsp页面传递数据库读取到的值方法

    2022-03-29 00:51:15
  • C# 委托的三种调用示例(同步调用 异步调用 异步回调)

    2023-06-09 10:29:56
  • Android 大文件切割与合并的实现代码

    2023-05-25 21:58:58
  • Spring Data JPA 复杂/多条件组合分页查询

    2021-09-06 02:57:55
  • java实现的新浪微博分享代码实例

    2023-07-06 08:33:13
  • asp之家 软件编程 m.aspxhome.com