Note
- springcloud提供多种方式服务间的调用。restTemplate / loadBalance / feign 等
- 比较推荐使用feign
- 每个service应当提供一个api的包出去让其他服务能调用
GitHub
地址:https://github.com/ithuhui/hui-base-springcloud
分支:finchley | greenwich
finchley分支配置中心配置存放在git->https://github.com/ithuhui/hui-base-springcloud-config-repo
Core-Code(SERVICE-PROVIDER)
maven
<!--SpringBoot Parent-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<springcloud.version>Greenwich.RELEASE</springcloud.version>
</properties>
<dependencyManagement>
<dependencies>
<!--Spring Cloud dependencies-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${springcloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
Code
/**
* <b><code>ProductAPI</code></b>
* <p/>
* Description:
* <p/>
* <b>Creation Time:</b> 2018/11/28 23:20.
*
* @author Hu Weihui
*/
@FeignClient(name = "product-server",path = "/product",fallback = ProductFeignApi.ProductFeignApiFallback.class )//如果产生服务降级就返回NULL
public interface ProductFeignApi {
/**
* fegin获取商品信息.
*
* @param id the id
* @return the mapper
* @author HuWeihui
* @since hui_project v1
*/
@GetMapping("/product/{id}")
ResultVO<ProductDTO> get(@PathVariable("id") String id);
@PutMapping("/products")
ResultVO add(@RequestBody ProductDTO productDTO);
@PutMapping("/lcn/tcc/products")
ResultVO tccAdd(@RequestBody ProductDTO productDTO);
@PutMapping("/lcn/txc/products")
ResultVO txcAdd(@RequestBody ProductDTO productDTO);
@Component
static class ProductFeignApiFallback implements ProductFeignApi{
/**
* fegin获取商品信息.
*
* @param id the id
* @return the mapper
* @author HuWeihui
* @since hui_project v1
*/
@Override
public ResultVO<ProductDTO> get(String id) {
return null;
}
@Override
public ResultVO add(ProductDTO productDTO) {
return null;
}
@Override
public ResultVO tccAdd(ProductDTO productDTO) {
DTXUserControls.rollbackGroup(TracingContext.tracing().groupId());
return null;
}
@Override
public ResultVO txcAdd(ProductDTO productDTO) {
return null;
}
}
}
Core-code(SERVICE-CONSUMER)
<!--引入服务提供方的API包-->
<dependency>
<groupId>com.hui.base.springcloud</groupId>
<artifactId>hui-base-springcloud-product-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
@Autowired
private ProductFeignApi productFeignApi;
/**
* fegin获取.
*
* @param id the id
* @return the response entity
* @author Hu weihui
* @since hui_project 1.0.0
*/
@GetMapping("/order/product4/{id}")
public ResultVO<ProductDTO> getProduct4(@PathVariable("id") String id) {
ProductDTO data = productFeignApi.get(id).getData();
log.info(data.toString());
return ResultMapper.ok(data);
}
Author
作者:HuHui
转载:欢迎一起讨论web和大数据问题,转载请注明作者和原文链接,感谢