1.服务发现与注册
在springcloud中有几个服务发现组件。
客户端组件发现:Eureka、Zk、ETCD
服务端发现组件:Consul、Nginx
springcloud相对应Eureka组件完整。
2.Eureka:
Eureka来自生产环境。
springcloud相对于Eureka支持较好。
Eureka说明:https://github.com/Netflix/eureka/wiki
SpringCloud:http://projects.spring.io/spring-cloud/
Eureka Server 提供了服务注册,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中会存储所有可用的服务节点信息,服务节点的信息可以在界面中看到。
====================================================================
建立Eureka项目
1.项目的pom.xml文件
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR3</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>
2.子项目的pom.xml文件
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
3.子项目是使用springboot进行配置,所以需要配置文件application.yml
配置为:
server: #Eureka的服务端口
port: 8761
security: #Eureka的安全认证中心,开启
basic:
enabled: true
user:#Eureka的用户名和密码
name: admin
password: admin
eureka:
client:#Eureka是否进行联系其他服务
register-with-eureka: false #Eureka默认服务也是一个客户端,这个是否把自己当成一个客户端,选择false不把自己当成客户端
fetch-registry: false #同上结合
service-url:#访问Eureka的地址
defaulttZone: http://localhost:8761/eureka
4.进行启动:
package com.simplesoft.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApp {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApp.class,args);
}
}
访问地址为:
http://localhost:8761/eureka
用户名和密码为自己设置的
项目结构::
访问页面::
5.注册到Eureka上面的服务:
有两种方式进行将类暴露在Eureka服务上
@EnableEurekaClient【用于Eureka】和 @EnableDiscovryClient【可以发现其他的服务发现工具,如:zk】
5.1.在客户端application.yml文件中添加
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/ #配置访问Eureka的地址 8761为Eureka的默认端口
instances:
prefer-ip-address: true #配置IP默认为false,不显示IP地址
在上面的红框框中,Application:代表的是应用名称,Status:代表的是:主机名+应用名称+端口号
通过以下代码可以知道Eureka的Client中的IP和端口:
@GetMapping("/instance-info")
public String serviceInstance() {
InstanceInfo serverFromEureka = this.eurekaClient.getNextServerFromEureka("MICRO-SERVICE-USER", false);
return serverFromEureka.getHomePageUrl();
}
还可以使用如下方式进行获取:
@GetMapping("/service-info")
public ServiceInstance serviceInstance() {
ServiceInstance ServiceInstance = this.discoveryClient.getLocalServiceInstance();
return ServiceInstance;
}