Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

阅读:364 2019-03-19 14:40:59 来源:新网

摘要:原创出处: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项目。

下一篇: Http请求头详解
相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服