1. 环境准备
(1)首先创建一个父工程spring-cloud-parent;
(2)子工程Eureka服务端EurekaServer9000,port指定为9000;
(3)子工程微服务提供者micro-service-provider,port指定为7001;
(4)子工程微服务消费者ms-consumer-user-8001,port指定为8001;
2. 父工程spring-cloud-parent的pom文件
主要是为了固定springboot的版本以及springcloud组件的版本。
<?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>org.example</groupId>
<artifactId>spring-cloud-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>EurekaServer9000</module>
<module>ms-consumer-user-8001</module>
<module>micro-service-provider</module>
</modules>
<packaging>pom</packaging>
<name>spring-cloud-parent Maven Webapp</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</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>
3. 子工程Eureka服务端配置
三步走:
(1)pom文件引入spring-cloud-starter-netflix-eureka-server
(2)主启动类上添加@EnableEurekaServer注解
(3)配置application.properties文件
详解:
3.1 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">
<parent>
<artifactId>spring-cloud-parent</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>EurekaServer9000</artifactId>
<packaging>war</packaging>
<name>EurekaServer9000 Maven Webapp</name>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</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>
<!--Eureka的服务端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.2 主启动类上添加@EnableEurekaServer注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class,args);
}
}
3.3 application.properties文件
# 服务端口
server.port=9000
# 表示是否将自己注册到Eureka Server,默认是true,由于当前应用为Eureka Server,故而设为false
eureka.client.register-with-eureka=false
# 表示是否从Eureka Server获取注册信息,默认为true,由于这是一个单点Eureka Server,不需要同步其它的Eureka Server节点的数据,故而设立false
eureka.client.fetch-registry=false
# 告知Eureka Client注册地址
# http://${eureka.instance.hostname}:${server.port}/eureka/ ----修改了hosts文件
eureka.client.service-url.defaultZone=http://localhost:9000/eureka/
3.4 启动浏览器查看
4. 服务提供者micro-service-provider
四步走:
(1)pom文件引入spring-cloud-starter-netflix-eureka-client
(2)主启动类上添加@EnableDiscoveryClient注解
(3)服务提供者提供服务功能
(4)配置application.properties文件
详解:
4.1 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">
<parent>
<artifactId>spring-cloud-parent</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>micro-service-provider</artifactId>
<packaging>war</packaging>
<name>micro-service-provider Maven Webapp</name>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
4.2 主启动类上添加@EnableDiscoveryClient注解
@SpringBootApplication
@EnableDiscoveryClient
public class MicroServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(MicroServiceProviderApplication.class, args);
}
}
4.3 提供服务功能
controller包下:
@RestController
public class ServiceController {
@RequestMapping(value = "/hello")
public String testEureka() {
return "hello,this is micro-service-provider,using 7001 port!";
}
}
4.4 application.properties文件
server.port=8001
# 注册到Eureka服务端的微服务名称
spring.application.name=ms-consumer-user
# 注册到Eureka服务端的地址
eureka.client.service-url.defaultZone=http://localhost:9000/eureka/
# 点击具体的微服务,右下角是否显示ip
eureka.instance.prefer-ip-address=true
# 显示微服务的名称
eureka.instance.instance-id=ms-consumer-user-8001
4.5 启动浏览器
5. 服务消费者ms-consumer-user-8001
四步走:
(1)pom文件引入spring-cloud-starter-netflix-eureka-client
(2)主启动类上添加@EnableDiscoveryClient注解
(3)服务消费者调用服务提供者的服务
(4)配置application.properties文件
详解:
5.1 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">
<parent>
<artifactId>spring-cloud-parent</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ms-consumer-user-8001</artifactId>
<packaging>war</packaging>
<name>ms-consumer-user-8001 Maven Webapp</name>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
5.2 主启动类上添加@EnableDiscoveryClient注解
@SpringBootApplication
@EnableDiscoveryClient
public class MsConsumerUser8001Application {
public static void main(String[] args) {
SpringApplication.run(MsConsumerUser8001Application.class, args);
}
}
5.3 服务消费者调用服务提供者的功能
这里添加一下消费流程吧:通过Springboot提供的RestTemplate去调用其他微服务功能,但是在使用RestTemplate时往往服务者的ip和port会变化,一旦变化,我们就要重新修改代码,重新部署,很麻烦。
config包下:
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
}
将RestTemplate实例的创建交给Springboot管理,这里加个@LoadBalance是为了负载均衡。
controller包下:
@RestController
public class MsConsumerController {
@Autowired
RestTemplate restTemplate;
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test(){
return restTemplate.getForEntity("http://micro-service-provider/hello", String.class).getBody();
}
}
这里服务消费者将去调用服务提供者的功能,这里的ip+port直接用服务提供者的名称micro-service-provider代替,如果访问成功,将返回服务提供者中对应接口的内容。
5.4 application.properties文件
server.port=8001
# 注册到Eureka服务端的微服务名称
spring.application.name=ms-consumer-user
# 注册到Eureka服务端的地址
eureka.client.service-url.defaultZone=http://localhost:9000/eureka/
# 点击具体的微服务,右下角是否显示ip
eureka.instance.prefer-ip-address=true
# 显示微服务的名称
eureka.instance.instance-id=ms-consumer-user-8001
5.5 启动浏览器
6. 测试
在浏览器中输入localhost:8001/hello