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=)]
初次尝试写博客 谢谢大家支持