1、POM
<parent>
<groupId>com.xxx</groupId>
<artifactId>xxx</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>xxx-webapi</artifactId>
<name>xxx-webapi</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>com.xxx</groupId>
<artifactId>xxx-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- json start -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.15</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.3</version>
<classifier>jdk15</classifier>
</dependency>
<!-- gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<!-- json end -->
<!-- ribbon消费者springcloud jar start -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- ribbon消费者springcloud jar end -->
</dependencies>
<build>
<finalName>xxx-webapi</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
2、启动类
@SpringBootApplication
@EnableDiscoveryClient
public class WebApiApplication {
private static final Logger log = LoggerFactory.getLogger(WebApiApplication.class);
public static void main(String[] args) {
log.info("**********接口中心启动-开始**********");
try {
SpringApplication.run(WebApiApplication.class, args);
log.info("**********接口中心启动-成功**********");
}
catch (Throwable e) {
log.info("**********接口中心启动-失败**********");
}
}
@Bean//向程序的ioc注入一个bean
@LoadBalanced//表明这个restRemplate开启负载均衡的功能
RestTemplate restTemplate() {
return new RestTemplate();
}
}
3、配置
#项目系统配置start
#默认端口
server.port=9002
#系统服务名称
spring.application.name=xxx-webapi
#注册中心
eureka.client.serviceUrl.defaultZone=http://admin:123456@localhost:9502/eureka/
#表示是否将自己注册到Eureka Server
eureka.client.registerWithEureka=false
#表示是否从Eureka Server获取注册信息
eureka.client.fetchRegistry=true
#服务调用超时
#请求处理的超时时间(默认5s)
ribbon.ReadTimeout=5000
#请求连接的超时时间(默认2s)
ribbon.ConnectTimeout=2000
#对所有操作请求都进行重试
hello-service.ribbon.OkToRetryOnAllOperations=false
#对当前实例的重试次数
ribbon.MaxAutoRetries=0
#切换实例的重试次数
ribbon.MaxAutoRetriesNextServer=0
#LOG
logging.file=./logs/log.log
#日志级别
logging.level.org.springframework=DEBUG
#项目系统配置end
#服务地址列表start*********************************
#银行卡认证服务
auth.url=http://xxx-provider/bankcard/auth
#服务地址列表end*********************************
#系统常量配置start*********************************
#系统常量配置end*********************************
4、demo
@RestController
@RequestMapping("/user")
public class UserController {
private static final Logger log = LoggerFactory.getLogger(UserController.class);
@Autowired
private RibbonCommonService ribbonCommonService;
@Value("${auth.url}")
private String authUrl;
@RequestMapping(value = "/auth", method = RequestMethod.POST)
public Object bankCardFourElementAuth(HttpServletRequest request,@RequestParam Map<String, Object> map) {
xxxResVo resVo = new xxxResVo();
log.info("接口请求参数:{}", map);
try {
//......
String result = ribbonCommonService.ribbonPost(reqVo, authUrl);
log.info("银行卡四要素认证请求返回信息:{}", result);
//......
}
catch (Throwable e) {
log.error("xxxxxx系统异常", e);
//......
}
log.info("银行卡四要素认证接口返回信息:{}", resVo);
return resVo;
}
}
public interface RibbonCommonService {
/**
* ribbon-post请求服务方式(baseReqVo)
*
* @version 2018年1月4日下午12:43:58
* @author wuliu
* @param params
* @param url
* @return
*/
public String ribbonPost(BaseReqVo baseReqVo, String url);
/**
* ribbon-post请求服务方式(map)
*
* @version 2018年1月4日下午12:43:58
* @author wuliu
* @param params
* @param url
* @return
*/
public String ribbonPost(Map<String,Object> params, String url);
}
@Service
public class RibbonCommonServiceImpl implements RibbonCommonService{
@Autowired
private RestTemplate restTemplate;
@Override
public String ribbonPost(BaseReqVo baseReqVo, String url) {
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.set("Connection", "Close");
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
JSONObject jsonObj = JSONObject.fromObject(baseReqVo);
HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers);
String result = restTemplate.postForObject(url, formEntity, String.class);
return result;
}
@Override
public String ribbonPost(Map<String, Object> params, String url) {
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.set("Connection", "Close");
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
JSONObject jsonObj = JSONObject.fromObject(params);
HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers);
String result = restTemplate.postForObject(url, formEntity, String.class);
return result;
}
}