微服务如何实现各个模块之间相互调用

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 微服务如何实现各个模块之间相互调用

前言

在做微服务项目时,我们可能都会遇到这样的情况,那就是A服务需要调用B服务中的某个接口,那有这样的需求时,我们应该怎么处理呢?

实现

使用@FeignClient 注解。
其实吧,网上也有好多关于Feign的相关知识和教程,一搜一大堆,有的看眼就会了,有的看眼就废了。。。

我来整理下我的方法吧,尽量的简单明了,不为别的,就为了报答你能在茫茫人海中找到我,让你别浪费时间,抓紧CV到工程中就能跑,到时候想起来了给我点个赞,想不起来了就算了,你好我好,大家都好!

A服务调用B服务的接口:

第一步:

检查下B服务中的接口,能不能直接用(主要看看返回值和参数,如果是普通的Stirngint之类的都能直接用)
如果是实体或者对象集合,我们就使用JSON传递数据。
如下我写了个接口:

 /**
     * 根据id查询网站的配置
     *
     * @return
     */
    @ApiOperation(value = "网站设置表-通过id查询", notes = "网站设置表-通过id查询")
    @GetMapping(value = "/queryConfigById")
    public String queryConfigById(String id) {
        JSONObject jsonObject = new JSONObject();
        WebConfig webConfig = webConfigService.getById(id);
        if (webConfig == null) {
            jsonObject.put("code", 200);
            jsonObject.put("data", null);
            return jsonObject.toJSONString();
        }
        jsonObject.put("code", 200);
        jsonObject.put("data", webConfig);
        return jsonObject.toJSONString();
    }

我这个就是返回了JSON数据。

第二步

在A服务模块中,新建个接口,添加@FeignClient注解,注解的值为B服务的模块名,也就是yml文件中的name

spring:
  application:
    name: xxx-web
  main:
    allow-bean-definition-overriding: true

接口代码如下:

@FeignClient("xxx-web")
public interface WebClient {

    /**
     * 根据编号查询网站的配置信息
     * @param id
     * @return
     */
    @GetMapping(value = "/config/webConfig/queryConfigById")
    String queryConfigById(@RequestParam("id") String id);
}

第三步

controller控制器中,自动注入B服务的模块。

    @Autowired
    private WebClient webClient;

这个名字:WebClient 就是我们创建的那个接口的名字。
至此,你就可以在控制器中随便用了,通过webClient点里面的方法即可,我的业务代码如下:

 String huifu = "欢迎关注~";
        try {
            //查询网站的配置信息,主要获取的是关注用户回复的内容
            String webConfig = webClient.queryConfigById("1");
            if(Strings.isNotBlank(webConfig)){
                JSONObject object = JSONObject.parseObject(webConfig);
                Integer code = object.getInteger("code");
                if(code==200){
                    String data = object.getString("data");
                    JSONObject dataObject = JSONObject.parseObject(data);
                    if(Strings.isNotBlank(dataObject.getString("xcxReply"))){
                        //拿到数据库中的关注之后回复的信息
                        huifu = dataObject.getString("xcxReply");
                    }
                }

            }
            return new TextBuilder().build(huifu, wxMessage, weixinService);
        } catch (Exception e) {
            this.logger.error(e.getMessage(), e);
        }

完事儿了!!!

目录
相关文章
|
Java 机器人 Maven
【Java用法】微服务之间的相互调用方式之一,通过FeignClient客户端调用其他微服务的方法包含熔断器(Hystrix)
【Java用法】微服务之间的相互调用方式之一,通过FeignClient客户端调用其他微服务的方法包含熔断器(Hystrix)
179 0
|
4月前
|
SQL 数据库 微服务
微服务03,最简单的Demo,我们每个服务不能重复开发相同业务,微服务数据独立,不要访问其他微服务的数据库,微服务的特点之一是提供不能功能的数据库互相分割,微服务需要根据业务模块拆分,做到单一职责,
微服务03,最简单的Demo,我们每个服务不能重复开发相同业务,微服务数据独立,不要访问其他微服务的数据库,微服务的特点之一是提供不能功能的数据库互相分割,微服务需要根据业务模块拆分,做到单一职责,
|
3月前
|
Java Maven 数据库
一文教会你如何进行Rest微服务构建 案例工程模块。教会你如何创建父子工程
这篇文章介绍了如何在微服务架构中创建父子工程模块,并通过RESTful服务的方式构建微服务通用案例,包括服务提供者和消费者的基本实现,以及数据库的创建和测试服务的步骤。
一文教会你如何进行Rest微服务构建 案例工程模块。教会你如何创建父子工程
|
Java Maven 微服务
【Java用法】微服务之间的相互调用方式之一,通过FeignClient客户端调用其他微服务的方法
【Java用法】微服务之间的相互调用方式之一,通过FeignClient客户端调用其他微服务的方法
159 0
|
6月前
|
Java Maven 微服务
微服务项目-将普通文件夹设为模块与添加services窗口
微服务项目-将普通文件夹设为模块与添加services窗口
37 0
|
Java Maven 微服务
【微服务项目异常】Maven中模块显示灰色的原因与解决办法
【微服务项目异常】Maven中模块显示灰色的原因与解决办法
335 0
|
SpringCloudAlibaba Java Maven
SpringCloud Alibaba微服务实战三十 | 统一资源服务器配置模块
SpringCloud Alibaba微服务实战三十 | 统一资源服务器配置模块
227 0
|
Java Maven 微服务
Spring Cloud【Finchley】实战-04将订单微服务与商品微服务分别拆分为多模块
Spring Cloud【Finchley】实战-04将订单微服务与商品微服务分别拆分为多模块
109 0
|
存储 缓存 运维
您需要模块,而不是微服务
您需要模块,而不是微服务
|
SQL JSON Java
(三)、Rest微服务支付模块构建
(三)、Rest微服务支付模块构建