Eureka 与 Zookeeper 都可以充当服务中心,它们的区别主要体现在对于 CAP 原则的支持的不同。
- Eureka:AP
- zk:CP
1.创建 Eureka 服务中心 eurekaserver-8000
1.1 新建 Spring Initializr 工程,命名为 eurekaserver-8000,pom依赖如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.demo</groupId>
<artifactId>eurekaserver-8000</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eurekaserver-8000</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.RC1</spring-cloud.version>
</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>
1.2 创建配置文件yml
server:
port: 8000
eureka:
instance:
hostname: 127.0.0.1
client:
#指示此实例是否应将其信息注册到eureka服务器以供其他人发现,单机模式false
register-with-eureka: false
#指示该客户端是否应从eureka服务器获取eureka注册表信息。
fetch-registry: false
service-url:
#服务中心集群只需要追加其他节点地址即可,逗号分隔
defaultZone: http://localhost.com:8000/eureka
1.3 启动类添加注解
@SpringBootApplication
@EnableEurekaServer // 开启Eureka服务
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
2 配置服务提供者
2.1 在原项目中的pom加入Eureka依赖
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<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>
<!--eureka客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.2 修改yml文件
spring:
application:
<!--指定微服务对外暴露的名称-->
name: provider-depart
eureka:
client:
service-url:
defaultZone: http://localhost:8000/eureka
3. 配置消费者工程
3.1 在原有消费端的pom加入依赖
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<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>
<!--eureka客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3.2 修改yml文件
server:
port: 8082
spring:
application:
name: consumer-depart
eureka:
client:
service-url:
defaultZone: http://localhost:8000/eureka
# defaultZone: http://eureka8100.com:8100/eureka
3.3 RestTemplate配置
RestTemplate 常用功能参考 https://www.iteye.com/blog/rensanning-2362105
@Configuration
public class DepartCodeConfig {
// 开启消费者对提供者的负载均衡调用方式
// 默认负载均衡策略为“轮询”
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
3.4 修改处理器
这是在原始框架下添加注册中心,还没加入openfeign,openfeign配置见下一章
@RestController
@RequestMapping("/consumer/depart")
public class DepartController {
@Autowired
private RestTemplate restTemplate;
// 将原来通过“主机名 + 端口号”的直连方式,改为“提供者微服务名称”的负载均衡方式
// private static final String SERVICE_PROVIDER = "http://localhost:8081";
private static final String SERVICE_PROVIDER = "http://abcmsc-provider-depart";
@PostMapping("/save")
public boolean saveHandle(@RequestBody Depart depart) {
String url = SERVICE_PROVIDER + "/provider/depart/save";
return restTemplate.postForObject(url, depart, Boolean.class);
}
}
3.5 启动类添加@EnableDiscoveryClient 注解
4. eureka 管理界面
分别启动eurekaservice,提供者,消费者
访问 http://localhost:8000/
每个服务节点的详细信息超链接可以通过以下配置
<!--actuator依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
# Eureka工作界面中instance-id处链接的信息
info:
company.name: www.baidu.com
company.addr: China Beijing
company.tel: 12345678
app.name: springclouddemo
app.desc: springcloud实战
author: 二狗子