{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
摘要:原创出处:www.bysocket.com泥瓦匠bysocket希望转载,保留摘要,谢谢!
“看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然。所以,无论什么事情,仔细想一想,都没有什么大不了的。这能帮助自己在遇到挫折时稳定心态,想得更开。”–《腾讯传》
本文提纲
一、为啥整合dubbo实现soa
二、运行springboot-dubbo-server和springboot-dubbo-client工程
三、springboot-dubbo-server和springboot-dubbo-client工程配置详解
一、为啥整合dubbo实现soa
dubbo不单单只是高性能的rpc调用框架,更是soa服务治理的一种方案。
核心:
1.远程通信,向本地调用一样调用远程方法。
2.集群容错
3.服务自动发现和注册,可平滑添加或者删除服务提供者。
我们常常使用springboot暴露http服务,并走json模式。但慢慢量大了,一种soa的治理方案。这样可以暴露出dubbo服务接口,提供给dubbo消费者进行rpc调用。下面我们详解下如何集成dubbo。
二、运行springboot-dubbo-server和springboot-dubbo-client工程
运行环境:jdk7或8,maven3.0+
技术栈:springboot1.5+、dubbo2.5+、zookeeper3.3+
1.zookeeper服务注册中心
zookeeper是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
下载zookeeper,地址http://www.apache.org/dyn/closer.cgi/zookeeper
解压zookeeper
1
tarzxvfzookeeper-3.4.8.tar.gz
在conf目录新建zoo.cfg,照着该目录的zoo_sample.cfg配置如下。
cdzookeeper-3.3.6/conf
vimzoo.cfg
zoo.cfg代码如下(自己指定log文件目录):
ticktime=2000
datadir=/javaee/zookeeper/data
datalogdir=/javaee/zookeeper/log
clientport=2181
在bin目录下,启动zookeeper:
cdzookeeper-3.3.6/bin
./zkserver.shstart
2.gitclone下载工程springboot-learning-example
项目地址见github–https://github.com/jeffli1993/springboot-learning-example:
gitclonegit@github.com:jeffli1993/springboot-learning-example.git
然后,maven编译安装这个工程:
cdspringboot-learning-example
mvncleaninstall
3.运行springboot-dubbo-serverdubbo服务提供者工程
右键运行springboot-dubbo-server工程serverapplication应用启动类的main函数。console中出现如下表示项目启动成功:
这里表示dubbo服务已经启动成功,并注册到zk(zookeeper)中。
4.运行springboot-dubbo-clientdubbo服务消费者工程
右键运行springboot-dubbo-client工程clientapplication应用启动类的main函数。console中出现如下:
...
2017-03-0116:31:38.473info9896---[main]o.s.j.e.a.annotationmbeanexporter:registeringbeansforjmxexposureonstartup
2017-03-0116:31:38.538info9896---[main]s.b.c.e.t.tomcatembeddedservletcontainer:tomcatstartedonport(s):8081(http)
2017-03-0116:31:38.547info9896---[main]org.spring.springboot.clientapplication:startedclientapplicationin6.055seconds(jvmrunningfor7.026)
city{id=1,provinceid=2,cityname='温岭',description='是我的故乡'}
最后打印的城市信息,就是通过dubbo服务接口调用获取的。顺利运行成功,下面详解下各个代码及配置。
三、springboot-dubbo-server和springboot-dubbo-client工程配置详解
代码都在github上,https://github.com/jeffli1993/springboot-learning-example。
1.详解springboot-dubbo-serverdubbo服务提供者工程
springboot-dubbo-server工程目录结构
├──pom.xml
└──src
└──main
├──java
│└──org
│└──spring
│└──springboot
│├──serverapplication.java
│├──domain
││└──city.java
│└──dubbo
│├──citydubboservice.java
│└──impl
│└──citydubboserviceimpl.java
└──resources
└──application.properties
a.pom.xml配置
pom.xml中依赖了spring-boot-starter-dubbo工程,该项目地址是https://github.com/teaey/spring-boot-starter-dubbo。pom.xml配置如下
xsi:schemalocation="http://maven.apache.org/pom/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
springboot
springboot-dubbo-server
0.0.1-snapshot
springboot-dubbo服务端::整合dubbo/zookeeper详解soa案例
org.springframework.boot
spring-boot-starter-parent
1.5.1.release
1.0.0
io.dubbo.springboot
spring-boot-starter-dubbo
${dubbo-spring-boot}
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
junit
junit
4.12
b.application.properties配置
1
2
3
4
5
6
##dubbo服务提供者配置
spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.scan=org.spring.springboot.dubbo
这里zk配置的地址和端口,就是上面本机搭建的zk。如果有自己的zk可以修改下面的配置。配置解释如下:
spring.dubbo.application.name应用名称
spring.dubbo.registry.address注册中心地址
spring.dubbo.protocol.name协议名称
spring.dubbo.protocol.port协议端口
spring.dubbo.scandubbo服务类包目录
c.citydubboserviceimpl.java城市业务dubbo服务层实现层类
//注册为dubbo服务
@service(version="1.0.0")
publicclasscitydubboserviceimplimplementscitydubboservice{
publiccityfindcitybyname(stringcityname){
returnnewcity(1l,2l,"温岭","是我的故乡");
}
}
@service注解标识为dubbo服务,并通过version指定了版本号。
d.city.java城市实体类
实体类通过dubbo服务之间rpc调用,则需要实现序列化接口。最好指定下serialversionuid值。
2.详解springboot-dubbo-clientdubbo服务消费者工程
springboot-dubbo-client工程目录结构
├──pom.xml
└──src
└──main
├──java
│└──org
│└──spring
│└──springboot
│├──clientapplication.java
│├──domain
││└──city.java
│└──dubbo
│├──citydubboconsumerservice.java
│└──citydubboservice.java
└──resources
└──application.properties
pom.xml、citydubboservice.java、city.java没有改动。dubbo消费者通过引入接口实现dubbo接口的调用。
a.application.properties配置
##避免和server工程端口冲突
server.port=8081
##dubbo服务消费者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=org.spring.springboot.dubbo
因为springboot-dubbo-server工程启动占用了8080端口,所以这边设置端口为8081。
b.citydubboconsumerservice.java城市dubbo服务消费者
@component
publicclasscitydubboconsumerservice{
@reference(version="1.0.0")
citydubboservicecitydubboservice;
publicvoidprintcity(){
stringcityname="温岭";
citycity=citydubboservice.findcitybyname(cityname);
system.out.println(city.tostring());
}
}
@reference(version=“1.0.0”)通过该注解,订阅该接口版本为1.0.0的dubbo服务。
这里将citydubboconsumerservice注入spring容器,是为了更方便的获取该bean,然后验证这个dubbo调用是否成功。
c.clientapplication.java客户端启动类
@springbootapplication
publicclassclientapplication{
publicstaticvoidmain(string[]args){
//程序启动入口
//启动嵌入式的tomcat并初始化spring环境及其各spring组件
configurableapplicationcontextrun=springapplication.run(clientapplication.class,args);
citydubboconsumerservicecityservice=run.getbean(citydubboconsumerservice.class);
cityservice.printcity();
}
}
解释下这段逻辑,就是启动后从bean容器中获取城市dubbo服务消费者bean。然后调用该bean方法去验证dubbo调用是否成功。
四、小结
还有涉及到服务的监控,治理。这本质上和springboot无关,所以这边不做一一介绍。感谢阿里teaey提供的starter-dubbo项目。