Spring 集成 Dubbo

Duboo是什么

  DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。
可以看出在阿里内部广泛应用,类似的还有Spring Cloud。

准备工作

准备两虚机,我这里用了CentOS7.2,加上本机可组成多提供者和消费者(当然一个虚机和不用虚机也可以)
我准备的两台IP为:192.168.124.129(用于 dubbo-admin) 192.168.124.131(用于 zookeeper 注册中心)

具体实现步骤

1、安装zookeeper

在其中一台虚机(192.168.124.131)中安装zookeeper,我这里安装的是zookeeper-3.4.9

下载后上传到虚机任意目录后解压,我上传到了 /usr/local 中文件夹名 zookeeper 后启动

/usr/local/zookeeper/bin/zkServer.sh start
[root@localhost ~]# /usr/local/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

2、部署dubbo-amdin

在另一台虚机(192.168.124.129)中部署dubbo-amdin 如果用的是duboo-admin 2.5.4的话是不能用jdk1.8,可以从github下载源码编译,最新版是支持的
部署很简单,
用编译好的直接替换 Tomcat 下webapps/ROOT中文件,打开WEB-INF/dubbo.properties并进行如下修改

dubbo.registry.address=zookeeper://192.168.124.131:2181  注册中心地址
dubbo.admin.root.password=root --管理员密码
dubbo.admin.guest.password=guest --用户密码

打开 192.168.124.129:8080 出现登录界面如下:

Spring 集成 Dubbo

  用root账号登录界面如下:

Spring 集成 Dubbo

  登录成功后看到如下界面,提供者和消费者都还没有,接下来的任务是注册提供者

Spring 集成 Dubbo

Spring 集成 Dubbo

3、提供者实现(Provider)

  先建项目:

Spring 集成 Dubbo

  最格结构如下:

Spring 集成 Dubbo

提供者配置文件applicationProvider.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 具体的实现bean -->
<bean id="demoService" class="io.kuaibao.provider.service.impl.UserServiceImpl" />
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="dubbo_provider" />
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://192.168.124.131:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20881" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="io.kuaibao.provider.service.UserService" ref="demoService" />
</beans>

4、消费者

  消费者配置文件applicationConsumer.xml

  

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="dubbo_consumer" />
<!-- 使用multicast广播注册中心暴露发现服务地址 -->
<dubbo:registry protocol="zookeeper" address="zookeeper://192.168.124.131:2181" />
<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="demoService" interface="io.kuaibao.provider.service.UserService" check="false" />
</beans>

MVC配置 spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> <!-- 自动扫描 @Controller-->
<context:component-scan base-package="io.kuaibao"/> <!--避免IE执行AJAX时,返回JSON出现下载文件 -->
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter"/> <!-- JSON转换器 -->
</list>
</property>
</bean> <!-- 定义跳转的文件的前后缀 ,视图模式配置 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp"/>
</bean> <!-- 文件上传配置 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 默认编码 -->
<property name="defaultEncoding" value="UTF-8"/>
<!-- 上传文件大小限制为31M,31*1024*1024 -->
<property name="maxUploadSize" value="32505856"/>
<!-- 内存中的最大值 -->
<property name="maxInMemorySize" value="4096"/>
</bean> <!-- 处理请求时返回json字符串的中文乱码问题 -->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven> </beans>

5、运行情况

  运行提供者, 再看Dubbo Admin中提供者界面,已经注册成功

  Spring 集成 Dubbo

  运得消费者后再看Dubbo Admin中消费者界面,已注册成功

  Spring 集成 Dubbo

  打包提供者和消费者后发布到 129服务器,后运行

  在Dubbo Admin 中看到提供者和消费者都是两个

  Spring 集成 Dubbo

  Spring 集成 Dubbo

6、负载均衡

  增加负载,设置为轮询

  Spring 集成 Dubbo

  把本地代码修改返回加上 本地 两个字后,我们刷新消费者可以看到,有这两个字和没有信息交替出现,证明我们的负载成功了

  Spring 集成 Dubbo

  Spring 集成 Dubbo

7、Github

  相关代码放到了Github中 地址:https://github.com/kuaibao/kuaibao-dubbo

  只是最简单的实现,如有好的建议请帮忙改进,谢谢!

上一篇:Uint 5.css继承权重,盒模型和border padding


下一篇:django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块