consul与springboot整合的consul-demo实例
consul-demo实例中包含两个服务,service-consumer与service-procider,目录结构如下图:
其中consul-demo中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>consul-demo</artifactId>
<packaging>pom</packaging>
<!--项目版本名称 快照版本SNAPSHOT、正式版本RELEASE-->
<version>1.0-SNAPSHOT</version>
<modules>
<module>service-provider</module>
<module>service-consumer</module>
</modules>
<!--继承spring-boot-starter-parent依赖-->
<!--使用继承方式,实现复用,符合继承的都可以被使用-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
<!--
集中定义依赖组件版本号,但不引入,
在子工程中用到声明的依赖时,可以不加依赖的版本号,
这样可以统一管理工程中用到的依赖版本
-->
<properties>
<!--Spring Cloud Hoxton.SR1依赖-->
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
</properties>
<!--项目依赖管理 父项目只是声明依赖,子项目需要写明需要的依赖(可以省略版本信息)-->
<dependencyManagement>
<dependencies>
<!--spring-cloud依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
接下来详细介绍涉及这两个服务的相关代码:
service-provider
代码结构如下:
其中,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-provider</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: 7070 # 端口
spring:
application:
name: service-provider # 应用名称
# 配置Consul注册中心
cloud:
consul:
# 注册中心的访问地址
host: localhost
port: 8500
# 服务提供者信息
discovery:
register: true # 是否需要注册
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
ProductController
@RestController
@RequestMapping("/product")
public class ProductController {
@Autowired
private ProductService productService;
/**
* 查询商品列表
* @return
*/
@GetMapping("/list")
public List<Product> selectProductList(){
return productService.selectProductList();
}
}
Product —实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product implements Serializable {
private Integer id;
private String productName;
private Integer productNum;
private Double productPrice;
}
ProductServiceImpl
@Service
public class ProductServiceImpl implements ProductService {
/**
* 查询商品列表
* @return
*/
@Override
public List<Product> selectProductList() {
return Arrays.asList(
new Product(1,"华为手机",1,5800D),
new Product(2,"联想笔记本",1,6888D),
new Product(3,"小米平板",5,2020D)
);
}
}
ProductService
/**
* 商品服务
*/
public interface ProductService {
/**
* 查询商品列表
* @return
*/
List<Product> selectProductList();
}