springcloud中使用feign在服务中远程调用服务简易版

springcloud中服务方调用服务方简易版

使用微服务时,需要在service中取另一个微服务中的数据来进行业务处理
在调用的服务方pom中加入需要的feign依赖
fastjson是转换对象时所需要的 可不加

//所需要的的maven依赖
 <!--feign 依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
<!--fastjson 依赖-->     
       <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>

使用微服务时,需要在service中取另一个微服务中的数据来进行业务处理
首先启动2个服务注册在注册中心
可以看到2个服务名 分别为:ITEM-SERVICE
AIDEADATASERVER
CN-GATEWAY是网关 可以不管
注册中心

@SpringBootApplication //标注是个springboot应用
@EnableDiscoveryClient //eurak客户端
@EnableFeignClients //开启feign组件功能 
@EnableOpenApi//启动swagger
@MapperScan("com.cn.item.mapper")//扫描mapper包
public class cnitemApplication {
    public static void main(String[] args) {
        SpringApplication.run(cnitemApplication.class,args);
    }
   

只需要在调用的服务方上添加@EnableFeignClients 注解 标注启动feign

ribbon:
  ReadTimeout=60000
  ConnectTimeout=60000
  MaxAutoRetries=0
  MaxAutoRetriesNextServer=1

application.yml上设置下riboon的超时设置 否则调用超时会报错
在swagger上测试下被调用方服务接口是否正常
在这里插入图片描述
在这里插入图片描述
被调用方服务接口能正常返回数据
测试调用这个post方式提交的接口
创建被调用对象post提交的对象 字段保持一致 这里我偷懒 全都用了string

package cn.item.pojo.ClientPojo;

import lombok.Data;

/**
 * @author 黄梓
 * @create 2021-03-18 14:50
 */
@Data
public class RequestCommt {
    private String adapmattertype;
    private String adapmtpro1;
    private String adapmtpro2;
    private String adapsign1;
    private String adapsign2;
    private String adapval1;
    private String adapval2;
    private String backwardinstruct;
    private String canbackstep;
    private String canmultiple;
    private String cantodraf;
    private String createdate;
    private String creatorid;
    private String creatorname;
    private String datastatus;
    private String dealrolecode;
    private String dealrolename;
    private String dealtype;
    private String dealuserids;
    private String departbm;
    private String done;
    private String formdirapp;
    private String formdirpc;
    private String formkey;
    private String forwardinstruct;
    private String fromdate;
    private String functionid;
    private String happentime;
    private String havedealuserids;
    private String id;
    private String mattertypeid;
    private String modifydate;
    private String modifyid;
    private String mtdesc;
    private String mtmaincode;
    private String mutiplecomptiti;
    private String nextpid;
    private String nextstepno;
    private String opiniontext;
    private String page;
    private String parentevent;
    private String parentstepno;
    private String property;
    private String propertyval;
    private String propsign;
    private String reminday;
    private String rows;
    private String settlementacc;
    private String stancename;
    private String stepid;
    private String stepname;
    private String stepno;
    private String steptype;
    private String submitmode;
    private String syscode;
    private String todate;
    private String username;
    private String wfstanceid;
    private String wfstatus;
    private String workflowid;
    private String zhihui;
    private String zhihuirole;
    private String zhihuiuserids;

返回的数据时list集合 而且返回的对象和post提交的对象并不是同样的 所以又创了一个接收对象来接收

package cn.item.pojo.ClientPojo;

import lombok.Data;

/**
 * @author 黄梓
 * @create 2021-03-18 14:14
 */
@Data
public class OrdPorduct {
    private String id;
    private String parentevent;
    private String mtmaincode;
    private String mattertypeid;
    private String happentime;
    private String createdate;
    private String datastatus;
    private String creatorid;
    private String creatorname;
    private String syscode;
    private String productcode;
    private String productcode_n;
    private String prodseriescode;
    private String prodseriescode_n;
    private String prodnum;
    private String prodweight;
    private String produnit;
    private String produnit_n;
    private String priceorig;
    private String pricenow;
    private String ordprodprice;
    private String pmcstatus;
    private String pmcstatus_n;
    private String faceimg;
    private String faceimg_n;
}
package com.cn.item.client;


import cn.item.pojo.ClientPojo.RequestCommt;
import cn.item.pojo.ClientPojo.YuOrder;
import domain.AjaxResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * @author 黄梓
 * @create 2021-03-17 16:57
 */
@FeignClient(value = "aideadataserver") //标注这是一个feign的类 value里面的值是被调用的服务方的服务名 注册中心中可以看到 默认小写 避免使用下划线
@Service
public interface YuOrderClient {
    @GetMapping("/Workflowdeal/formdataByid/{syscode}/{mattertypeid}/{eventid}") //服务方的路径
    public AjaxResult queryUserByid(@PathVariable("syscode")String syscode, @PathVariable("mattertypeid") String mattertypeid, @PathVariable("eventid") String eventid );
    @PostMapping("/Workflowdeal/commtEventRowList")//服务方的路径 测试的post方式的接口 请求对象命名可以随意取
    public AjaxResult yuOrderList(@RequestBody RequestCommt requestCommt);
}

由于被调用方返回的json数据都在 AjaxResult中的data里面
在调用方接口测试调用被调用的服务接口

 RequestCommt requestCommt = new RequestCommt();
        requestCommt.setMattertypeid("ORD_PRODUCT");
        requestCommt.setPage("1");
        requestCommt.setParentevent("PO210302-1742-0002");
        requestCommt.setRows("1000");
        requestCommt.setSyscode(syscode);
        AjaxResult ajaxResult = yuOrderClient.yuOrderList(requestCommt);
        List<OrdPorduct>  commtEventRowList= JSON.parseObject(JSON.toJSONString(ajaxResult.get("data")), new TypeReference<List<OrdPorduct>>() {
        });
        System.out.println(commtEventRowList.toString());
        return AjaxResult.success(commtEventRowList);
    }

启动 在swagger中测试试试
在调用方的接口中测试
在这里插入图片描述
在这里插入图片描述
成功拿到数据 并且控制台中也打印出了数据

},Server stats: [[Server:192.168.124.25:8088;	Zone:defaultZone;	Total Requests:0;	Successive connection failure:0;	Total blackout seconds:0;	Last connection made:Thu Jan 01 08:00:00 CST 1970;	First connection made: Thu Jan 01 08:00:00 CST 1970;	Active Connections:0;	total failure count in last (1000) msecs:0;	average resp time:0.0;	90 percentile resp time:0.0;	95 percentile resp time:0.0;	min resp time:0.0;	max resp time:0.0;	stddev resp time:0.0]
]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@121cb213
[OrdPorduct(id=14c320212c944046a804934433b1d7c2, parentevent=PO210302-1742-0002, mtmaincode=10025, mattertypeid=ORD_PRODUCT, happentime=2021-03-02, createdate=2021-03-02 17:42:24, datastatus=0, creatorid=57, creatorname=庄小雪, syscode=NANFENG, productcode=21A11, productcode_n=, prodseriescode=3#, prodseriescode_n=, prodnum=1, prodweight=25, produnit=strip, produnit_n=, priceorig=0, pricenow=50, ordprodprice=1250, pmcstatus=1, pmcstatus_n=, faceimg=, faceimg_n=), OrdPorduct(id=19ec00c0719d4ef99aaeadad7e0b75f2, parentevent=PO210302-1742-0002, mtmaincode=10025, mattertypeid=ORD_PRODUCT, happentime=2021-03-02, createdate=2021-03-02 17:42:24, datastatus=0, creatorid=57, creatorname=庄小雪, syscode=NANFENG, productcode=21S棉自动间平纹, productcode_n=, prodseriescode=1#, prodseriescode_n=, prodnum=1, prodweight=25, produnit=strip, produnit_n=, priceorig=0, pricenow=20, ordprodprice=500, pmcstatus=1, pmcstatus_n=, faceimg=, faceimg_n=)]

初次尝试写博客 谢谢大家支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄木辛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值