1 Feign
1.0 功能
服務間接口調用.
1.2 調用過程
- 場景
服務A調用服務B的接口. - 實現過程
在服務A中使用Feign配置服務B的應用及路徑屬性. - 一句話
在發起調用的服務中,配置被調用服務的信息.
1.3 流程圖
2 Usage
2.1 服務A-工單服務
2.1.0 啓動類
啓動類中添加註解@EnableFeignClients,打開Feign,服務間進行Http調用.
package com.personal.microspersonalworkorder;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* @author xdq
* @description Service Start.
* @date 2020/6/18
*/
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class MicrospersonalWorkorderApplication {
static Logger logger = LoggerFactory.getLogger(MicrospersonalWorkorderApplication.class);
public static void main(String[] args) {
SpringApplication.run(MicrospersonalWorkorderApplication.class, args);
logger.info("WORKORDER啓動");
}
}
2.1.2 接口類
在發起調用的服務A中,配置被調用服務的應用和URI,發起調用的服務接口如下:
參數屬性如下表:
@FeignClient(value,path)
序號 | 屬性 | 描述 |
---|---|---|
1 | value | 被調用的服務B應用名稱,即配置文件中(*.yml)的application:name:micros-user |
2 | path | 被調用的服務B的servlet路徑,即配置文件中(*.yml)的servlet: context-path: /user,如沒有配置,則省略參數path |
@RequestMapping(value)
value爲服務B的完整URI.
方法中的參數前添加@RequestBody或@RequestParam,與被調用的服務B中接口完全一致.
package com.personal.microspersonalworkorder.feign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Map;
/**
* @author xdq
* @description Call user service
* @date 2020/6/18
*/
@FeignClient(value="micros-user",path="user")
public interface MicrospersonalUser {
@RequestMapping("/api/page/user/query")
Map queryFromUser(@RequestBody Map params);
}
2.1.3 服務類
package com.personal.microspersonalworkorder.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Map;
import com.personal.microspersonalworkorder.feign.MicrospersonalUser;
/**
* @author xdq
* @description Service funciton.
* @date 2020/6/18
*/
@Service
@Transactional
public class UserInfosService {
@Autowired
private MicrospersonalUser microspersonalUser;
public Map getUserInfos(Map params){
return microspersonalUser.queryFromUser(params);
}
}
2.2 服務B-人員信息服務
2.2.1 配置文件
配置信息摘要,調用服務B的其他服務需要進行配置的:
序號 | 屬性 | 描述 |
---|---|---|
1 | application:name:micros-user | 服務應用名稱 |
2 | servlet:context-path:/user | 服務B全局路徑 |
spring:
devtools:
restart:
enabled: true
profiles: dev
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/data_repository?useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
application:
name: micros-user
server:
port: 8091
servlet:
session:
timeout: PT10S
context-path: /user
eureka:
client:
service-url:
defaultZone: http://localhost:8090/eureka/eureka
logging:
level:
root: INFO
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
2.2.1 實體類
package com.personal.microspersonaluser;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cache.annotation.EnableCaching;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* @author xdq
* @description Service Start.
* @date 2020/6/18
*/
@SpringBootApplication
@MapperScan("com.personal.microspersonaluser.mapper")
@EnableSwagger2
@EnableCaching
@EnableEurekaClient
@EnableFeignClients
public class MicrospersonalUserApplication extends SpringBootServletInitializer{
private static Logger logger = LoggerFactory.getLogger(MicrospersonalUserApplication.class);
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
return application.sources(MicrospersonalUserApplication.class);
}
public static void main(String[] args){
SpringApplication.run(MicrospersonalUserApplication.class, args);
logger.info("USER服務啓動");
}
}
2.2.2 接口類
package com.personal.microspersonaluser.mapper;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import com.personal.microspersonaluser.po.UserInfos;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author xdq
* @description Interface.
* @date 2020/6/6
*/
public interface UserInfosMapper {
public Integer addUser(UserInfos params);
public Integer deleteUser(Integer id );
public Integer editUser(UserInfos params);
public List<UserInfos> queryUser(Map params);
public UserInfos queryUserWithId(Integer id);
public UserInfos loginByEmail(String email);
}
2.2.3 服務類
package com.personal.microspersonaluser.service;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.personal.microspersonaluser.mapper.UserInfosMapper;
import com.personal.microspersonaluser.po.UserInfos;
/**
* @author xdq
* @description User service.
* @date 2020/6/6
*/
@Service
@Transactional
public class UserInfosService {
@Autowired
private UserInfosMapper userInfosMapper;
public Integer addUser(UserInfos params){
return userInfosMapper.addUser(params);
}
public Integer deleteUser(Integer id){
return userInfosMapper.deleteUser(id);
}
public Integer editUser(UserInfos params){
return userInfosMapper.editUser(params);
}
public List queryUser(Map params){
return userInfosMapper.queryUser(params);
}
public UserInfos queryUserWithId(Integer id){
return userInfosMapper.queryUserWithId(id);
}
public UserInfos loginByEmail(String email){
return userInfosMapper.loginByEmail(email);
}
}
【參考文獻】
[1]https://www.cnblogs.com/huangjuncong/p/9053576.html
[2]https://blog.csdn.net/qq_42815754/article/details/93341709
[3]https://blog.csdn.net/qq_29235677/article/details/91994857#feign%E6%96%B9%E5%BC%8F%E5%AE%9E%E7%8E%B0%E6%9C%8D%E5%8A%A1%E9%97%B4%E7%9A%84%E8%B0%83%E7%94%A8
[4]https://www.cnblogs.com/a8457013/p/8290119.html