不同SpringBoot项目实现consul+feign简单注册和服务调用

两个项目都引入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调用测试:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以将现有的Spring Boot项目拓展为一个Spring Cloud项目,以实现分布式架构和微服务的特性。下面是一些步骤来拓展你的项目: 1. 引入Spring Cloud依赖:在你的项目中,添加Spring Cloud的相关依赖,比如spring-cloud-starter-netflix-eureka-server、spring-cloud-starter-netflix-eureka-client等。这些依赖将提供分布式系统所需的功能,比如服务注册与发现、负载均衡等。 2. 配置服务注册与发现:使用Eureka或Consul注册中心,配置你的服务注册与发现机制。在Spring Boot项目的配置文件中,指定注册中心的地址和相关配置。 3. 拆分微服务:将你的项目按照业务功能拆分为多个微服务。每个微服务负责一个特定的业务模块。可以使用Spring Cloud提供的Feign或RestTemplate等工具来进行服务间的通信。 4. 配置负载均衡:使用Ribbon等负载均衡工具,配置你的微服务实例的负载均衡策略。这样可以实现请求的分发和高可用性。 5. 配置断路器:使用Hystrix等断路器工具,配置你的微服务的容错机制。当某个微服务不可用时,断路器可以提供降级策略,以保证系统的可用性。 6. 配置服务网关:使用Zuul或Gateway等服务网关工具,配置你的微服务网关。服务网关可以进行请求的路由、过滤和鉴权等操作,提供统一的入口和出口。 7. 配置分布式链路追踪:使用Sleuth和Zipkin等工具,配置你的微服务的分布式链路追踪功能。这样可以追踪请求的调用链路,方便排查问题和性能优化。 通过以上步骤,你的Spring Boot项目将被拓展为一个基于Spring Cloud的分布式系统,具备微服务的特性和优势。请注意,在拓展过程中,你可能需要重新设计和修改一些代码,以适应分布式架构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值