两个项目都引入jar包

<!-- 注册发现、远程配置、远程调用三件套 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-config</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

服务提供方application.yml主要配置:

server:
  port: 8080
spring:
  application:
    name: vevor-mall-login
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        # 启用服务发现
        enabled: true
        # 启用服务注册
        register: true
        # 服务停止时取消注册
        deregister: true
        # 表示注册时使用IP而不是hostname
        prefer-ip-address: true
        # 执行监控检查的频率
        health-check-interval: 30s
        # 设置健康检查失败多长时间后,取消注册
        health-check-critical-timeout: 30s
        # 开启心跳检测
        heartbeat:
          enabled: true
        # 健康检查的路径
        health-check-path: /actuator/info
        # 服务注册标识,格式为:应用名称+服务器IP+端口
        instance-id: ${spring.application.name}:${spring.cloud.client.ipaddress}:${server.port}
      config:
        # 启用consul的配置中心功能,默认是true
        enabled: true
        # 表示consul上面文件的格式 有四种 YAML PROPERTIES KEY-VALUE FILES,默认是KEY-VALUE
        format: YAML
        #配置基本文件,默认值config
        prefix: ${spring.application.name}
        #表示开发环境:dev/test/preprod,生产环境独立部署consul服务器
        default-context: dev
        #表示consul上面的配置文件名,每个开发人员各自管理自己的配置文件
        data-key: lixinyu
        # watch选项为配置监视功能,主要监视配置的改变
        watch:
          enabled: true
          delay: 10000
          wait-time: 30

启动类上加

springboot clientId和clientSecret生成 springboot springcould_配置文件

写一个简单的controller

springboot clientId和clientSecret生成 springboot springcould_配置文件_02

服务调用方application.yml配置。除了端口号和application.name,其余相同

server:
  port: 8082
spring:
  application:
    name: auth-token
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        # 启用服务发现
        enabled: true
        # 启用服务注册
        register: true
        # 服务停止时取消注册
        deregister: true
        # 表示注册时使用IP而不是hostname
        prefer-ip-address: true
        # 执行监控检查的频率
        health-check-interval: 30s
        # 设置健康检查失败多长时间后,取消注册
        health-check-critical-timeout: 30s
        # 开启心跳检测
        heartbeat:
          enabled: true
        # 健康检查的路径
        health-check-path: /actuator/info
        # 服务注册标识,格式为:应用名称+服务器IP+端口
        instance-id: ${spring.application.name}:${spring.cloud.client.ipaddress}:${server.port}
      config:
        # 启用consul的配置中心功能,默认是true
        enabled: true
        # 表示consul上面文件的格式 有四种 YAML PROPERTIES KEY-VALUE FILES,默认是KEY-VALUE
        format: YAML
        #配置基本文件,默认值config
        prefix: ${spring.application.name}
        #表示开发环境:dev/test/preprod,生产环境独立部署consul服务器
        default-context: dev
        #表示consul上面的配置文件名,每个开发人员各自管理自己的配置文件
        data-key: lixinyu
        # watch选项为配置监视功能,主要监视配置的改变
        watch:
          enabled: true
          delay: 10000
          wait-time: 30

写一个简单的调用接口:

package com.vevor.loginmall.client;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

// FeignClient后面也可以直接写url=“***”
@FeignClient(value = "vevor-mall-login")
public interface FeignTestClient {

    @RequestMapping(value = "/authLoginController/feign",produces = "application/json;charset=UTF-8")
    String getFeign();
}

由于服务提供方添加了oauth2认证,所以服务请求方配置一个FeignConfig,添加请求头

package com.vevor.loginmall.config;

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

//@Configuration
public class FeignConfig implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate requestTemplate) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        //添加token
        requestTemplate.header("Bearer Token", request.getHeader("Bearer Token"));
    }
}

写个简单的controller调用

springboot clientId和clientSecret生成 springboot springcould_spring_03

由于服务调用方项目配置了请求拦截器,所以需要配置释放请求的路径

springboot clientId和clientSecret生成 springboot springcould_服务器_04

服务调用方启动类上添加下面两个标签,配置请求的接口所在包名

springboot clientId和clientSecret生成 springboot springcould_spring_05

两个项目启动后consul会注册两个服务

springboot clientId和clientSecret生成 springboot springcould_服务器_06

通过postman调用测试:

springboot clientId和clientSecret生成 springboot springcould_spring_07