在之前的项目中,我们可以看到我们客户端要记录大量的地址信息,而且无法确定某个服务是否可用。所以我们启用Eureka注册中心来统一管理微服务,新建一个模块microcloud-eureka-7001:
里面包含pom.xml和配置文件application.yml以及启动类Eureka_7001_StartSpringCloudApplication.java
pom.xml
4.0.0
com.jmx
microcloud
0.0.1
com.jmx
microcloud-eureka-7001
0.0.1
microcloud-eureka-7001
http://maven.apache.org
UTF-8
org.springframework.cloud
spring-cloud-starter-eureka-server
org.springframework.cloud
spring-cloud-starter-config
org.springframework.boot
spring-boot-starter-jetty
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework
springloaded
org.springframework.boot
spring-boot-devtools
application.yml
server:
port: 7001
eureka:
instance: #定义Eureka实例
hostname: eureka-7001.com #Eureka实例所在的主机名
#eureka默认情况下,把自己当做客户端来注册自己,所以我们要禁用它
client:
register-with-eureka: false #表示是否将自己注册到Eureka Server上,默认为true
fetch-registry: false #表示是否从Eureka Server上获取注册信息,默认为true
Eureka_7001_StartSpringCloudApplication.java
package com.jmx.microcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**程序主类
* @author JMX
*
*/
@SpringBootApplication
@EnableEurekaServer
public class Eureka_7001_StartSpringCloudApplication {
public static void main(String[] args) {
SpringApplication.run(Eureka_7001_StartSpringCloudApplication.class, args);
}
}
同样的,我们在C:\Windows\System32\drivers\etc路径下的hosts里最后面添加地址用于模拟Eureka注册中心
127.0.0.1 eureka-7001.com #Eureka注册中心
启动启动类,浏览器输入http://eureka-7001.com:7001/
我们的Eureka注册中心就配置好了.
2.在我们的微服务中注册成Eureka的客户端,修改microcloud-provider-dept-8001的pom.xml,添加Eureka的客户端相关依赖
pom.xml
org.springframework.cloud
spring-cloud-starter-eureka
org.springframework.cloud
spring-cloud-starter-config
修改application.yml配置文件添加客户端相关配置
server:
port: 8001
eureka:
client: #客户端进行Eureka注册的配置
service-url:
defaultZone: http://eureka-7001.com:7001/eureka/
mybatis:
config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路径
type-aliases-package: com.jmx.vo # 定义所有操作类的别名所在包
mapper-locations: # 所有的mapper映射文件
- classpath:mybatis/mapper/**/*.xml
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 配置当前要使用的数据源的操作类型
driver-class-name: org.gjt.mm.mysql.Driver # 配置MySQL的驱动程序类
url: jdbc:mysql://localhost:3307/jmx8001?useUnicode=true&characterEncoding=utf-8 # 数据库连接地址
username: root # 数据库用户名
password: 123456 # 数据库连接密码
dbcp2: # 进行数据库连接池的配置
min-idle: 5 # 数据库连接池的最小维持连接数
initial-size: 5 # 初始化提供的连接数
max-total: 5 # 最大的连接数
max-wait-millis: 200 # 等待连接获取的最大超时时间
application:
name: provider-8001 # Eureka注册中心服务名
修改Dept_8001_StartSpringCloudApplication.java,在启动类添加@EnableEurekaClient注解
package com.jmx.microcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**程序主类
* @author JMX
*
*/
@SpringBootApplication
@EnableEurekaClient
public class Dept_8001_StartSpringCloudApplication {
public static void main(String[] args) {
SpringApplication.run(Dept_8001_StartSpringCloudApplication.class, args);
}
}
启动该主类,浏览器输入http://eureka-7001.com:7001/
这样我们就把8001端口这个微服务注册到了Eureka注册中心了.
3.Eureka微服务信息,上面那张图看出我们的微服务是主机名拼凑而成的连接,这样在应用环境是非常不友好的,应该是IP或者域名
结合起来,我们先配置资源文件以及导入资源插件.打开我们的microcloud的pom.xml
pom.xml
4.0.0
com.jmx
microcloud
0.0.1
pom
microcloud
http://maven.apache.org
1.8
UTF-8
com.jmx
microcloud-api
0.0.1
com.jmx
microcloud-security
0.0.1
org.springframework.cloud
spring-cloud-dependencies
Dalston.SR1
pom
import
org.springframework.boot
spring-boot-dependencies
1.5.4.RELEASE
pom
import
mysql
mysql-connector-java
5.0.4
com.alibaba
druid
1.0.31
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.0
microcloud
src/main/resources
true
org.apache.maven.plugins
maven-resources-plugin
$
org.apache.maven.plugins
maven-compiler-plugin
${jdk.version}
${project.build.sourceEncoding}
microcloud-api
microcloud-provider-dept-8001
microcloud-consumer-80
microcloud-security
microcloud-eureka-7001
然后修改我们的微服务microcloud-provider-dept-8001的pom.xml导入微服务监控插件
org.springframework.boot
spring-boot-starter-actuator
然后配置我们微服务的相关信息,修改application.yml
server:
port: 8001
eureka:
client: #客户端进行Eureka注册的配置
service-url:
defaultZone: http://eureka-7001.com:7001/eureka/
instance:
instance-id: dept-8001.com #在信息列表时显示主机名称
prefer-ip-address: true #访问路径变为IP地址
info:
app.name: jmx-microcloud
company.name: www.52jmx.com
build.artifactId: $project.artifactId$
build.version: $project.version$
我们启动Eureka以及微服务,浏览器输入http://eureka-7001.com:7001/
双击我们微服务的地址
输入账号密码
我们在application.yml的配置就显示出来了。
4.Eureka发现服务以及相关保护模式,实际项目中我们的Eureka是作为所有微服务的监控处理的,新服务追加的时候应该可以进行注册,某个微服务下线后可以进行清理。(此项如无特殊需求,一般我们都是默认处理)既然是设置Eureka的设置我们便修改microcloud-eureka-7001的application.yml的内容
application.yml
server:
port: 7001
eureka:
instance: #定义Eureka实例
hostname: eureka-7001.com #Eureka实例所在的主机名
#eureka默认情况下,把自己当做客户端来注册自己,所以我们要禁用它
client:
register-with-eureka: false #表示是否将自己注册到Eureka Server上,默认为true
fetch-registry: false #表示是否从Eureka Server上获取注册信息,默认为true
server:
eviction-interval-timer-in-ms: 6000 #设置清理的间隔时间(默认6000ms)
enable-self-preservation: false #关闭保护模式
微服务与Eureka注册中心的心跳时间自定义,心跳检测是检测微服务是否宕机的重要手段,我们修改microcloud-provider-dept-8001的application.yml
server:
port: 8001
eureka:
client: #客户端进行Eureka注册的配置
service-url:
defaultZone: http://eureka-7001.com:7001/eureka/
instance:
lease-expiration-duration-in-seconds: 5 #设置心跳的周期间隔(默认90s)[如果5s没响应默认服务宕机]
lease-renewal-interval-in-seconds: 2 #设置心跳时间间隔(默认30s)
instance-id: dept-8001.com #在信息列表时显示主机名称
prefer-ip-address: true #访问路径变为IP地址
info:
app.name: jmx-microcloud
company.name: www.52jmx.com
build.artifactId: $project.artifactId$
build.version: $project.version$
微服务端直接通过发现服务获取一些服务信息,我们修改DeptRest.java与启动类Dept_8001_StartSpringCloudApplication.java
DeptRest.java
package com.jmx.microcloud.rest;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.jmx.microcloud.service.IDeptService;
import com.jmx.vo.Dept;
@RestController
public class DeptRest {
@Autowired
private IDeptService ideptService;
@Autowired
private DiscoveryClient client;//Eureka的发现服务
@RequestMapping(value="/dept/get/{id}",method=RequestMethod.GET)
public Dept get(@PathVariable(value="id")int id) {
return ideptService.get(id);
}
@RequestMapping(value="/dept/add",method=RequestMethod.POST)
public boolean add(@RequestBody Dept dept) {
return ideptService.add(dept);
}
@RequestMapping(value="/dept/list",method=RequestMethod.GET)
public List list() {
return ideptService.list();
}
@RequestMapping("/dept/sessionid")
public String id(HttpServletRequest request) {
return request.getSession().getId();
}
@RequestMapping("/dept/discover")
public DiscoveryClient discover() {
//直接返回发现服务信息
return this.client;
}
}
Dept_8001_StartSpringCloudApplication.java
package com.jmx.microcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**程序主类
* @author JMX
*
*/
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class Dept_8001_StartSpringCloudApplication {
public static void main(String[] args) {
SpringApplication.run(Dept_8001_StartSpringCloudApplication.class, args);
}
}
OK了发现服务配置好了启动微服务以及Eureka注册中心,浏览器输入:http://dept-8001.com:8001/dept/discover(我们直接跳过Eureka注册中心进行访问)
5.Eureka注册中心的安全配置,修改microcloud-eureka-7001的pom.xml文件追加SpringSecurity的依赖包,在application.yml里面追加认证账户密码.
pom.xml
org.springframework.boot
spring-boot-starter-security
application.yml
server:
port: 7001
security:
basic:
enabled: true #启用安全处理
user:
name: edmin #用户名
password: jmxhello #密码
eureka:
instance: #定义Eureka实例
hostname: eureka-7001.com #Eureka实例所在的主机名
#eureka默认情况下,把自己当做客户端来注册自己,所以我们要禁用它
client:
register-with-eureka: false #表示是否将自己注册到Eureka Server上,默认为true
fetch-registry: false #表示是否从Eureka Server上获取注册信息,默认为true
server:
eviction-interval-timer-in-ms: 6000 #设置清理的间隔时间(默认6000ms)
enable-self-preservation: false #关闭保护模式
并在微服务microcloud-provider-dept-8001追加Security安全配置,修改application.yml
server:
port: 8001
eureka:
client: #客户端进行Eureka注册的配置
service-url:
defaultZone: http://edmin:[email protected]:7001/eureka/
instance:
lease-expiration-duration-in-seconds: 5 #设置心跳的周期间隔(默认90s)[如果5s没响应默认服务宕机]
lease-renewal-interval-in-seconds: 2 #设置心跳时间间隔(默认30s)
instance-id: dept-8001.com #在信息列表时显示主机名称
prefer-ip-address: true #访问路径变为IP地址
info:
app.name: jmx-microcloud
company.name: www.52jmx.com
build.artifactId: $project.artifactId$
build.version: $project.version$
mybatis:
config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路径
type-aliases-package: com.jmx.vo # 定义所有操作类的别名所在包
mapper-locations: # 所有的mapper映射文件
- classpath:mybatis/mapper/**/*.xml
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 配置当前要使用的数据源的操作类型
driver-class-name: org.gjt.mm.mysql.Driver # 配置MySQL的驱动程序类
url: jdbc:mysql://localhost:3307/jmx8001?useUnicode=true&characterEncoding=utf-8 # 数据库连接地址
username: root # 数据库用户名
password: 123456 # 数据库连接密码
dbcp2: # 进行数据库连接池的配置
min-idle: 5 # 数据库连接池的最小维持连接数
initial-size: 5 # 初始化提供的连接数
max-total: 5 # 最大的连接数
max-wait-millis: 200 # 等待连接获取的最大超时时间
application:
name: provider-8001 # Eureka注册中心服务名
6.Eureka的集群HA机制,我们既然要做Eureka的集群,那么就会面临多主机的处理,我们修改C:\Windows\System32\drivers\etc路径下的hosts最后添加Eureka集群的模拟地址
127.0.0.1 eureka-7001.com #Eureka注册中心的集群-0
127.0.0.1 eureka-7002.com #Eureka注册中心的集群-1
127.0.0.1 eureka-7003.com #Eureka注册中心的集群-2
项目中从microcloud-eureka-7001复制2份改名为microcloud-eureka-7002与microcloud-eureka-7003,如下图所示
修改microcloud-eureka-7001的application.yml
application.yml
server:
port: 7001
security:
basic:
enabled: true #启用安全处理
user:
name: edmin #用户名
password: jmxhello #密码
eureka:
instance: #定义Eureka实例
hostname: eureka-7001.com #Eureka实例所在的主机名
#eureka默认情况下,把自己当做客户端来注册自己,所以我们要禁用它
client:
service-url:
defaultZone: http://edmin:[email protected]:7002/eureka,http://edmin:[email protected]:7003/eureka
register-with-eureka: false #表示是否将自己注册到Eureka Server上,默认为true
fetch-registry: false #表示是否从Eureka Server上获取注册信息,默认为true
server:
eviction-interval-timer-in-ms: 6000 #设置清理的间隔时间(默认6000ms)
enable-self-preservation: false #关闭保护模式
接着修改microcloud-eureka-7002与microcloud-eureka-7003的Springboot的启动类以及application.yml的端口号以及客户端注册Eureka地址
microcloud-eureka-7002的启动类Eureka_7002_StartSpringCloudApplication.java与application.yml
Eureka_7002_StartSpringCloudApplication.java
package com.jmx.microcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**程序主类
* @author JMX
*
*/
@SpringBootApplication
@EnableEurekaServer
public class Eureka_7002_StartSpringCloudApplication {
public static void main(String[] args) {
SpringApplication.run(Eureka_7002_StartSpringCloudApplication.class, args);
}
}
application.yml
server:
port: 7002
security:
basic:
enabled: true #启用安全处理
user:
name: edmin #用户名
password: jmxhello #密码
eureka:
instance: #定义Eureka实例
hostname: eureka-7002.com #Eureka实例所在的主机名
#eureka默认情况下,把自己当做客户端来注册自己,所以我们要禁用它
client:
service-url:
defaultZone: http://edmin:[email protected]:7001/eureka,http://edmin:[email protected]:7003/eureka
register-with-eureka: false #表示是否将自己注册到Eureka Server上,默认为true
fetch-registry: false #表示是否从Eureka Server上获取注册信息,默认为true
server:
eviction-interval-timer-in-ms: 6000 #设置清理的间隔时间(默认6000ms)
enable-self-preservation: false #关闭保护模式
microcloud-eureka-7003的启动类Eureka_7003_StartSpringCloudApplication.java与application.yml
Eureka_7003_StartSpringCloudApplication.java
package com.jmx.microcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**程序主类
* @author JMX
*
*/
@SpringBootApplication
@EnableEurekaServer
public class Eureka_7003_StartSpringCloudApplication {
public static void main(String[] args) {
SpringApplication.run(Eureka_7003_StartSpringCloudApplication.class, args);
}
}
application.yml
server:
port: 7003
security:
basic:
enabled: true #启用安全处理
user:
name: edmin #用户名
password: jmxhello #密码
eureka:
instance: #定义Eureka实例
hostname: eureka-7003.com #Eureka实例所在的主机名
#eureka默认情况下,把自己当做客户端来注册自己,所以我们要禁用它
client:
service-url:
defaultZone: http://edmin:[email protected]:7001/eureka,http://edmin:[email protected]:7002/eureka
register-with-eureka: false #表示是否将自己注册到Eureka Server上,默认为true
fetch-registry: false #表示是否从Eureka Server上获取注册信息,默认为true
server:
eviction-interval-timer-in-ms: 6000 #设置清理的间隔时间(默认6000ms)
enable-self-preservation: false #关闭保护模式
把我们的Eureka注册中心的所有服务都启动起来,浏览器分别输入:
http://edmin:[email protected]:7001
http://edmin:[email protected]:7002
http://edmin:[email protected]:7003
从上面三幅图里我们看见了我们的Eureka注册中心分别在三台主机上部署成功,成功实现了集群部署.然后我们将微服务注册进去修改microcloud-provider-dept-8001的application.yml添加其他Eureka注册中心的主机地址
application.yml
server:
port: 8001
eureka:
client: #客户端进行Eureka注册的配置
service-url:
defaultZone: http://edmin:[email protected]:7001/eureka/,http://edmin:[email protected]:7002/eureka/,http://edmin:[email protected]:7003/eureka/
instance:
lease-expiration-duration-in-seconds: 5 #设置心跳的周期间隔(默认90s)[如果5s没响应默认服务宕机]
lease-renewal-interval-in-seconds: 2 #设置心跳时间间隔(默认30s)
instance-id: dept-8001.com #在信息列表时显示主机名称
prefer-ip-address: true #访问路径变为IP地址
info:
app.name: jmx-microcloud
company.name: www.52jmx.com
build.artifactId: $project.artifactId$
build.version: $project.version$
mybatis:
config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路径
type-aliases-package: com.jmx.vo # 定义所有操作类的别名所在包
mapper-locations: # 所有的mapper映射文件
- classpath:mybatis/mapper/**/*.xml
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 配置当前要使用的数据源的操作类型
driver-class-name: org.gjt.mm.mysql.Driver # 配置MySQL的驱动程序类
url: jdbc:mysql://localhost:3307/jmx8001?useUnicode=true&characterEncoding=utf-8 # 数据库连接地址
username: root # 数据库用户名
password: 123456 # 数据库连接密码
dbcp2: # 进行数据库连接池的配置
min-idle: 5 # 数据库连接池的最小维持连接数
initial-size: 5 # 初始化提供的连接数
max-total: 5 # 最大的连接数
max-wait-millis: 200 # 等待连接获取的最大超时时间
application:
name: provider-8001 # Eureka注册中心服务名
启动微服务,分别刷新三个端口的Eureka注册中心,然后查看是否注册成功。我们发现三个地址的微服务都已经注册成功
7.Eureka的服务发布,我们需要新增一个microcloud-eureka-server的模块,修改application.yml
application.yml
spring:
profiles:
active:
- dev-7001 #设置常用的活动Eureka注册中心
--- #Eureka注册中心7001
spring:
profiles: dev-7001
application:
name: microcloud-eureka-7001
server:
port: 7001
security:
basic:
enabled: true #启用安全处理
user:
name: edmin #用户名
password: jmxhello #密码
eureka:
instance: #定义Eureka实例
hostname: eureka-7001.com #Eureka实例所在的主机名
#eureka默认情况下,把自己当做客户端来注册自己,所以我们要禁用它
client:
service-url:
defaultZone: http://edmin:[email protected]:7002/eureka,http://edmin:[email protected]:7003/eureka
register-with-eureka: false #表示是否将自己注册到Eureka Server上,默认为true
fetch-registry: false #表示是否从Eureka Server上获取注册信息,默认为true
server:
eviction-interval-timer-in-ms: 6000 #设置清理的间隔时间(默认6000ms)
enable-self-preservation: false #关闭保护模式
--- #Eureka注册中心7002
spring:
profiles: dev-7002
application:
name: microcloud-eureka-7002
server:
port: 7002
security:
basic:
enabled: true #启用安全处理
user:
name: edmin #用户名
password: jmxhello #密码
eureka:
instance: #定义Eureka实例
hostname: eureka-7002.com #Eureka实例所在的主机名
#eureka默认情况下,把自己当做客户端来注册自己,所以我们要禁用它
client:
service-url:
defaultZone: http://edmin:[email protected]:7001/eureka,http://edmin:[email protected]:7003/eureka
register-with-eureka: false #表示是否将自己注册到Eureka Server上,默认为true
fetch-registry: false #表示是否从Eureka Server上获取注册信息,默认为true
server:
eviction-interval-timer-in-ms: 6000 #设置清理的间隔时间(默认6000ms)
enable-self-preservation: false #关闭保护模式
--- #Eureka注册中心7003
spring:
profiles: dev-7003
application:
name: microcloud-eureka-7003
server:
port: 7003
security:
basic:
enabled: true #启用安全处理
user:
name: edmin #用户名
password: jmxhello #密码
eureka:
instance: #定义Eureka实例
hostname: eureka-7003.com #Eureka实例所在的主机名
#eureka默认情况下,把自己当做客户端来注册自己,所以我们要禁用它
client:
service-url:
defaultZone: http://edmin:[email protected]:7001/eureka,http://edmin:[email protected]:7002/eureka
register-with-eureka: false #表示是否将自己注册到Eureka Server上,默认为true
fetch-registry: false #表示是否从Eureka Server上获取注册信息,默认为true
server:
eviction-interval-timer-in-ms: 6000 #设置清理的间隔时间(默认6000ms)
enable-self-preservation: false #关闭保护模式
然后在microcloud-eureka-server模块上运行maven的build命令[clean install package]
打包成功我们在microcloud-eureka-server的target目录下有eureka-server.jar包
到此,我们的Eureka注册中心已经完成。
项目Demo:点我下载