一.注册中心eureka的项目搭建
1.新建eureka-server maven工程 , pom文件
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<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>
<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>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
2.启动类
//启动EurekaServer
@EnableEurekaServer
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
3.application.yml配置
server:
#占用端口
port: 8091
eureka:
instance:
hostname: localhost
client:
#指示此实例是否应将其信息注册到eureka服务器以供其他人发现。在某些情况下,您不希望发现实例,而您只想发现其他实例。
register-with-eureka: false
#指示该客户端是否应从eureka服务器获取eureka注册表信息。
fetch-registry: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
server:
#关闭自我保护机制(检测实例失败立马剔除实例
enable-self-preservation: false
#每隔3s检测实例是否发来心跳
eviction-interval-timer-in-ms: 3000
4.启动 ,浏览器访问: http://localhost:8091/
二.服务提供者项目搭建
1.新建item maven工程 , pom文件
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<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>
<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>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
2.启动类
@SpringBootApplication
// 启用eureka的客户端
@EnableEurekaClient
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
3.提供者的http接口类
//相当于@Controller+@ResponseBody的结合体
@RestController
public class ItemController {
@RequestMapping("query")
public String demo() {
return "provider success!";
}
}
4.application.yml配置
server:
port: 8881
spring:
application:
#给微服务设置一个名字
name: ITEM
eureka:
client:
#允许作为客户端
fetch-registry: true
service-url:
# eureka 注册中心的地址
defaultZone: http://localhost:8091/eureka/
5.启动 测试,浏览器访问: http://localhost:8881/query
刷新 注册中心,发现ITEM提供者实例被注册进来了
二.消费者项目搭建
1.新建item-consumer项目,pom配置
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<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>
<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>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
2.启动类
@SpringBootApplication
// 启用eureka的客户端
@EnableEurekaClient
public class Main {
@Bean // 向spring中注入一个bean ==》 RestOperations(用来进行http请求工具)
@LoadBalanced // 消费者请求提供者采用负载均衡模式
RestOperations restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
3.提供者 controller接口
@RestController
public class TestController {
@Autowired
RestOperations restTemplate;
@GetMapping("/test")
public String rlogin() {
// 需要调用ITEM(item)这个微服务,注册中心里面服务名是大写
// query:指要转跳的微服务的控制层的路径
String url = "http://ITEM/query";
// null:要传入到ITEM实例的/query接口的参数,因为没有所以为null
// String.class:ITEM实例的/query接口的 返回数据class
ResponseEntity<String> objectResponseEntity = restTemplate.postForEntity(url, null, String.class);//微服务http调用
// 获取返回数据
String body = objectResponseEntity.getBody();
// 当重微服务得到的Result对象的数据中code属性是1时表示,登录成功
System.err.println("获取item服务的 数据>>" + body);
return body;
}
}
4.application.yml配置
server:
port: 80
spring:
application:
name: item-consumer
eureka:
client:
fetch-registry: true
service-url:
defaultZone: http://localhost:8091/eureka/
5.启动,访问 :http://localhost/test
发已经获取到了 微服务ITEM实例的数据, 注册中心也有两个可见实例
到此,demo搭建完成,可以部署到不同机器测试。