SpringSource公司开源的SpringCloud与阿里开源的Dubbo一直是SOA架构服务调度框架的首选,前段时间公司尝试使用了Dubbo+Zookeeper架构模式,但是实践过程中发现几个比较重要的缺陷,虽然也有比较好的优势但是此文就不阐述Dubbo的优势了,主要说下为何遗弃的几点原因供大家参考:
1.Dubbo虽然对代码的植入很小,但是在对提供者与消费者分层时,需要使用Maven的依赖开发功能,看似没什么问题,但是当提供者存在很多Git分支时,消费者在调试设置部署上线时需要非常小心,很容易出错。
2.Dubbo+Zookeeper架构的监控工具搜索了一番,发现貌似DubboKeeper这个开源监控从界面上看还算可以,但是真正的监控功能不够强大。
3.现在内部很多项目都采用SpringBoot方式在开发了,但是Dubbo还不支持,虽然也有一些网上存在个人开发的一些附加包可以支持,但是安全性有点疑虑
综上几点原因思考后还是决定采用SpringCloud进行SOA调度框架,而SpringBootAdmin官方提供的监控工具功能很强大,扩展性也很全面,下面就给大家说下整合这些框架的具体流程,整合过程中本人遇到了很多的坑,都是泪...,具体流程按以下步骤:
1.首先下载Zookeeper并且分布式安装配置,此文就不阐述,详细可以见:Ubuntu14 分布式安装Zookeeper
2.官方说明最好不要将SpringBootAdmin监控工具和提供者或者消费者放在一个项目,因为不安全,如果你的项目挂了随之监控也挂了那么还需要监控做什么呢,所以新建一个SpringBoot项目,然后在Pom加入
de.codecentric
spring-boot-admin-server
1.5.1
de.codecentric
spring-boot-admin-server-ui
1.5.1
org.jolokia
jolokia-core
1.3.6
org.springframework.boot
spring-boot-starter-mail
1.5.3.RELEASE
org.springframework.cloud
spring-cloud-starter-zookeeper-discovery
1.1.0.RELEASE
org.springframework.cloud
spring-cloud-consul-core
1.2.0.RELEASE
然后再Main方法入口加上:
@Configuration
@EnableAutoConfiguration
@EnableDiscoveryClient
@EnableAdminServer
#监控工具端口
server.port=8181
#监控刷新时间 单位毫秒
spring.boot.admin.monitor.period=10000
#是否开启自动发现服务
spring.boot.admin.discovery.enabled=true
spring.cloud.consul.enabled=true
#是否需要秘钥认证
management.security.enabled=false
#拥有者
info.owner=Mazkc
#监控版本号
[email protected]@
spring:
application:
name: UPBOX-SpringAdmin
cloud:
config:
enabled: false
zookeeper:
connect-string: xxxx:2181
discovery:
enabled: true
instance-host: localhost
instance-port: ${server.port}
3.建立服务提供者SpringBoot项目,然后再Pom文件加入:
org.springframework.boot
spring-boot-starter-parent
1.5.4.RELEASE
org.springframework.boot
spring-boot-starter-data-jpa
org.springframework.boot
spring-boot-starter-activemq
org.springframework.boot
spring-boot-starter-aop
org.springframework.boot
spring-boot-starter-cache
org.springframework.cloud
spring-cloud-starter-config
org.springframework.cloud
spring-cloud-config-server
org.springframework.cloud
spring-cloud-starter-oauth2
org.springframework.cloud
spring-cloud-starter-security
org.springframework.cloud
spring-cloud-starter
org.springframework.cloud
spring-cloud-starter-zookeeper-config
org.springframework.cloud
spring-cloud-starter-task
org.springframework.boot
spring-boot-starter-data-redis
redis.clients
jedis
io.pivotal.spring.cloud
spring-cloud-services-starter-config-client
io.pivotal.spring.cloud
spring-cloud-services-starter-service-registry
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-websocket
org.springframework.boot
spring-boot-devtools
runtime
mysql
mysql-connector-java
org.springframework.boot
spring-boot-starter-tomcat
provided
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-starter-contract-stub-runner
test
de.codecentric
spring-boot-admin-starter-client
1.5.1
org.jolokia
jolokia-core
1.3.6
org.springframework.boot
spring-boot-starter-actuator
1.5.3.RELEASE
接着新建application.xml文件,写入:
#当前应用程序名字
spring.boot.admin.client.name=Demo
#客户端启动后是否自动注册
spring.boot.admin.auto-registration=true
spring.boot.admin.client.enabled=true
#客户端是否提供本机真实ip
spring.boot.admin.client.prefer-ip=true
#Spring-Cloud监控中心地址
spring.boot.admin.url=http://localhost:8181
#客户端项目地址
spring.boot.admin.client.service-url=http://localhost:8585
#客户端版本号,在监控中心显示
[email protected]@
info.owner=Mazkc
#是否需要安全认证
management.security.enabled=false
security.user.name=wmq
security.user.password=wmq
#如果Admin端设置了用户名密码访问,你也需要在客户端配置它们
spring.boot.admin.username=wmq
spring.boot.admin.password=wmq
#客户端使用端口
server.port=8585
#线上MYSQL数据库配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://xxxx:3306/xxxx
spring.datasource.username=xxx
spring.datasource.password=xxx
在新建bootstrap.yml文件,写入:
spring:
application:
name: HelloWorld
cloud:
zookeeper:
connect-string: xxxx:2181
discovery:
enabled: true
logging:
level:
org.apache.zookeeper.ClientCnxn: ERROR
最后在Main方法入口加上:
@SpringBootApplication(exclude = {MongoAutoConfiguration.class,MongoDataAutoConfiguration.class,
EurekaClientAutoConfiguration.class,EurekaClientConfigServerAutoConfiguration.class,
EurekaDiscoveryClientConfigServiceAutoConfiguration.class,EurekaInstanceAutoConfiguration.class})
@EnableDiscoveryClient
至此已经配置完成,服务监控和服务注册都已经完成了,主需要先将监控项目启动,在将提供者项目启动就完成了。