两个SpringBoot模块互相调用(基于SpringCloud-Alibaba)

549 阅读3分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路

基于SpringCloud-Alibaba,Nacos,OpenFeign完成远程调用功能

一,简介

在SpringCloud分布式微服务系统中,常会遇到远程调用其他模块的问题,SpringCloud-Alibaba提供了Nacos注册中心,配置中心,OpenFeign组件为我们提供了远程调用功能,极大方便了我们对项目的管理以及调用。 下面为大家演示使用Spring Cloud Alibaba的Nacos和OpenFeign完成的远程调用。

二,环境配置

==注意==:nacos的开启,服务注册,配置中心不是今天的主角,将简单描述。

1,首先引入依赖,根据自己使用的spring cloud版本选择

        <!--服务注册/发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--配置中心-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>0.2.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2,修改对应服务的配置文件,将服务注册到nacos注册中心

1,调用方的配置文件配置

server:
  port: 10001
spring:
  application:
    name: naisimall-product	#此处的名,设为你的项目模块名即可
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        #以下为数据库和mybatis-plus的相关配置,保留自己的即可
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.136.88:3306/naisimall_pms
    driver-class-name: com.mysql.jdbc.Driver
mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto
      logic-delete-value: 1
      logic-not-delete-value: 0

2,被调用方的配置文件配置

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.136.88:3306/naisimall_sms
    driver-class-name: com.mysql.jdbc.Driver
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: naisimall-coupon #此处的名,设为你的项目模块名即可
mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto
server:
  port: 7000

三,代码编写

1,修改对应服务的启动类,完成服务注册

1,调用方的启动类

@MapperScan("com.chen.naisimall.product.dao")
@SpringBootApplication
@EnableDiscoveryClient	//开启服务发现功能
//开启远程调用功能,这里的basePackages为远程调用的接口包
@EnableFeignClients(basePackages = "com.chen.naisimall.product.feign")
public class NaisimallProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(NaisimallProductApplication.class, args);
    }
}

2,被调用方的启动类

@EnableDiscoveryClient
@SpringBootApplication
public class NaisimallCouponApplication {

    public static void main(String[] args) {
        SpringApplication.run(NaisimallCouponApplication.class, args);
    }
}

2,编写远程调用方法

1,编写被远程调用的方法,就是写好的普通请求方法。此处是在naisimall-coupon模块里

@RestController
@RequestMapping("coupon/spubounds")
public class SpuBoundsController {
    @Autowired
    private SpuBoundsService spuBoundsService;
    
    @RequestMapping("/list")
    public R list() {
        PageUtils page = spuBoundsService.list();
        return R.ok().put("page", page);
    }
}

2,编写远程调用的接口,此处是在naisimall-product模块里, ==(1),首先编写远程调用的接口== 在feign包下新建接口 在这里插入图片描述

@FeignClient("naisimall-coupon")	//此处填写远程调用的服务名,和配置文件匹配
public interface CouponFeignService {
	//路径填写完全,和被调用接口有点不太一样
    @PostMapping("/coupon/spubounds/list")
    public R list();
}

3,编写远程调用的方法,此处是在naisimall-product模块里,

@RestController
@RequestMapping("product/attr")
public class AttrController {
	//注入编写好的远程调用接口CouponFeignService
    @Autowired
    CouponFeignService couponFeignService;

    @RequestMapping("/list")
    public R list() {
    	//远程调用CouponFeignService
        PageUtils page = couponFeignService.list();
        return R.ok().put("page", page);
    }
}

四,注意事项

1,服务一定要注册在nacos注册中心,且服务名要和项目中的对应上 2,该使用的注解一定不要少,主要在启动类上的注解 3,配置文件一定要填写完整 4,远程调用的接口,路径一定要写全,不可丢失,包括Controller类上注解标识的路径

五,启动项目,此时远程调用接口已经调通,完活收工。