consul与springboot整合的consul-demo实例
service-consumer
service-consumer代码目录如下:
其中,pom内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxxx</groupId>
<artifactId>service-consumer</artifactId>
<version>1.0-SNAPSHOT</version>
<!--继承父依赖-->
<parent>
<groupId>com.xxxx</groupId>
<artifactId>consul-demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<!--项目依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--spring cloud consul 依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!--spring boot actuator依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--spring boot web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<!--spring boot test依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
application.yml文件内容如下:
server:
port: 9090 # 端口
spring:
application:
name: service-consumer # 应用名称
# 配置Consul注册中心
cloud:
consul:
# 注册中心的访问地址
host: localhost
port: 8500
# 服务提供者信息
discovery:
register: false # 是否需要注册
instance-id: ${
spring.application.name}-01 # 注册实例id(必须唯一)
service-name: ${
spring.application.name} # 服务名称
port: ${
server.port} # 服务端口
prefer-ip-address: true #是否使用ip地址注册
ip-address: ${
spring.cloud.client.ip-address} # 服务请求ip
OrderController
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private OrderService orderService;
/**
* 根据主键查询订单
* @param id
* @return
*/
@GetMapping("/{id}")
public Order selectOrderById(@PathVariable("id") Integer id) {
return orderService.selectOrderById(id);
}
}
实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Order implements Serializable {
private Integer id;
private String orderNo;
private String orderAdress;
private Double totalPrice;
private List<Product> productList;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product implements Serializable {
private Integer id;
private String productName;
private Integer productNum;
private Double productPrice;
}
OrderServiceImpl
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private RestTemplate restTemplate;
/**
* 根据主键查询订单
* @param id
* @return
*/
@Override
public Order selectOrderById(Integer id) {
return new Order(id,"order-001","中国",22780D,selectProductListByLoadBalancerAnnotation());
}
private List<Product> selectProductListByLoadBalancerAnnotation() {
//ResponseEntity:封装了返回数据
ResponseEntity<List<Product>> response = restTemplate.exchange("http://service-provider/product/list",
HttpMethod.GET, null, new ParameterizedTypeReference<List<Product>>() {
});
return response.getBody();
}
}
OrderService
/**
* 商品服务
*/
public interface OrderService {
/**
* 查询商品列表
* @return
*/
Order selectOrderById(Integer id);
}