SpringCloudAlibaba集成Springboot+Nacos+Feign

项目场景:

微服务项目,springboot整合springCloud+springCloudAlibaba

Nacos做服务注册与发现 可扩充做配置文件管理

Feign做模块之间的远程接口调用


基础依赖:所有模块都需要引入的依赖

    
        org.springframework.boot
        spring-boot-starter-parent
        2.6.9
        
    
    


        

            
            
                org.springframework.cloud
                spring-cloud-dependencies
                2021.0.1
                pom
                import
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2021.0.1.0
                pom
                import
            
        

    

 
     
        
            org.springframework.cloud
            spring-cloud-starter
        

    
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        


        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        

        
            org.springframework.cloud
            spring-cloud-loadbalancer
        


 

在服务消费者和服务提供者的项目中 新建bootstrap.properties配置nacos信息

spring.application.name=apm-mobile-android
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
#ip 端口
spring.cloud.nacos.server-addr=localhost:8848


#openFeign接口调用项目的 命名空间 和 分组必须一致
spring.cloud.nacos.discovery.namespace=TEST
spring.cloud.nacos.discovery.group=DEFAULT_GROUP

 

新建项目 bh-api 统一管理所有的模块调用 定义的 service api

 

SpringCloudAlibaba集成Springboot+Nacos+Feign_第1张图片

新建BackServiceRpc接口定义需要的接口内容

        注:@FeignClient注解里 vaule的值 是nacos注册的服务名,要与之对应,不然会找不到服务

import com.bh.api.constants.FeignConstant;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * @Description
 * @Author wcl
 * @Date 2022/10/14 11:19
 */
@FeignClient(value = FeignConstant.back_provider_value)
public interface BackServiceRpc {

    @PostMapping("/back")
    String back1(@RequestParam("str") String str);

}

 定义接口时 要使用@RequestParam 或@RequestBody 或其他注解 否则会出现传不过去值 

 定义好接口之后本地 进行 install,这样本地调试的时候才能引入所定义rpc接口api模块依赖。如果要上生产环境需要进行maven私服配置,将本项目的依赖包deploy打到私服才能进行依赖的引入

SpringCloudAlibaba集成Springboot+Nacos+Feign_第2张图片

 


 新建项目bh-back(服务提供者)

引入service api 模块的依赖


    com.bh.api
    bh-api
    1.0.0-snapshot

启动类上方加注解

@EnableDiscoveryClient  //开启nacos的服务注册与发现

@EnableFeignClients(basePackages="com.bh.api") //激活OpenFeign

basePackages="com.bh.api"  里面的路径是 在api模块定义接口的扫描包路径

 

 定义rpc接口实现类BackServiceImpl  实现api项目模块定义的 BackServiceRpc接口

import com.bh.api.back.BackServiceRpc;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description
 * @Author wcl
 * @Date 2022/10/20 18:23
 */
@RestController
public class BackServiceImpl implements BackServiceRpc {

    @Override
    public String back(String str) {
        return str;
    }
} 

 新建项目bh-strategy(服务消费者)

引入service api 模块的依赖


    com.bh.api
    bh-api
    1.0.0-snapshot

启动类上方加注解

@EnableDiscoveryClient  //开启nacos的服务注册与发现

@EnableFeignClients(basePackages="com.bh.api") //激活OpenFeign

basePackages="com.bh.api"  里面的路径是 在api模块定义接口的扫描包路径

创建controller进行接口调用

import com.bh.api.back.BackServiceRpc;
import com.bh.common.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * @author wcl
 */
@RestController
@RequestMapping("/pub")
@Api(tags = "测试rpc接口")
public class LoginController {

    @Resource
    private BackServiceRpc backServiceRpc;

    @GetMapping("/test")
    @ApiOperation("获取用户详情")
    public ResultBean test(){
        String back = backServiceRpc.back("测试rpc接口");
        return ResultBean.success(back);
    }

}

 SpringCloudAlibaba集成Springboot+Nacos+Feign_第3张图片

 各个模块之间的调用 如果有拦截器检验会将rpc路径拦截,如我所在api模块定义的接口 路径是"/back",我的提供者模块是token拦截检验,在消费者模块进行服务调用时,会被拦截。可将该rpc接口的路径放行,也可以将所需要的token参数携带过来。

你可能感兴趣的:(java,spring,boot,java,后端,spring,cloud,微服务)