两个项目都引入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
启动类上加
写一个简单的controller
服务调用方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调用
由于服务调用方项目配置了请求拦截器,所以需要配置释放请求的路径
服务调用方启动类上添加下面两个标签,配置请求的接口所在包名
两个项目启动后consul会注册两个服务
通过postman调用测试: