本系列文章均参考:朝雨忆轻尘,感谢博主!
这里还有他的技术交流群:429854222,欢迎大家支持博主
若有侵权,还请告知,一定删除
这里我们使用consul作为服务注册中心(毕竟Eureka已经停更了。。。不过Eureka已经很稳定了一般情况下使用也没事)
服务提供者:
新建spring boot项目
Group填组名,Artifact填模块名,package一般是groupId+artifactId。
group按字面意思就是组,可以把其他spring boot项目加入这个组,由此组成了spring cloud。Artifact一般是项目名(模块),属于组中的什么功能(模块),比如是gateway,比如是config等等。
建好项目后的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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.test.ream</groupId>
<artifactId>test-producer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>test-producer</name>
<description>producer project for Spring cloud</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring-boot-admin-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>${spring.boot.admin.version}</version>
</dependency>
<!--consul-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
parent里管理spring boot版本,这里使用的是2.0.4.RELEASE;
properties可以定义一些属性,如spring-cloud.version等;
dependencies添加依赖:consul-discovery启用对consul的支持,starter-web启用web;
dependencyManagement:Spring Cloud的依赖配置;
下面就是修改配置文件(在这之前先把application.properties更名为application.yml):
server:
port: 8000 #服务启动端口
spring:
application:
name: test-producer #应用名
cloud:
consul:
host: localhost
port: 8500
discovery:
serviceName: ${spring.application.name} # 注册到consul的服务名称${spring.application.name}对应的就是应用名
启动类添加@EnableDiscoveryClient:
@EnableDiscoveryClient
@SpringBootApplication
public class TestProducerApplication {
public static void main(String[] args) {
SpringApplication.run(TestProducerApplication.class, args);
}
}
创建一个Controller(跟启动类在一个包下,建新包的话要在启动类加@ComponentScan),写一个简单的接口用于测试:
@RestController
public class HelloController {
@GetMapping(value="test1")
public String test1() {
return "hello,world";
}
}
启动应用分别访问http://localhost:8500,http://localhost:8000/test1:
服务提供者到此;
服务消费者
新建
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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.test.ream</groupId>
<artifactId>test-comsumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>test-comsumer</name>
<description>comsumer project for Spring cloud</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
yml文件:
server:
port: 8001
spring:
application:
name: test-comsumer
cloud:
consul:
host: localhost
port: 8500
discovery:
serviceName: ${spring.application.name} # 注册到consul的服务名称
新建controller调用提供者:
@RestController
public class CallHelloController {
@Autowired
private LoadBalancerClient loadBalancer;
@GetMapping("/call")
public String call() {
ServiceInstance serviceInstance = loadBalancer.choose("test-producer");
System.out.println("服务地址:" + serviceInstance.getUri());
System.out.println("服务名称:" + serviceInstance.getServiceId());
String callServiceResult = new RestTemplate().getForObject(serviceInstance.getUri().toString() + "/test1", String.class);
return callServiceResult;
}
}
应用启动:
控制台:
调用成功!
好了,告辞!