java学习之spring集成Dubbo

1、关于Dubbo的个人理解

    其实就是给分布式的系统的各个系统之间提供了一个远程服务调用方案(类似于HttpClient,没有搞清楚他们的区别在哪里,可能是因为HttpClient需要暴露出去url才可以实现数据共享),即A系统需要请求B系统的某个业务,那么我们原始的做法就是使用HttpClient模拟客户端去请求,接收数据,完成业务,而现在,使用dubbo的话,其实就是B系统已经把这部分业务的接口暴露在了消息中间件zookeeper上,而A接口如果要使用,直接通过zookeeper转发到B应用,这样就实现了数据共享,业务联调。其中在dubbo中,我们定义A系统为消费者,B系统为服务者

2、安装zookeeper(注册中心)

下载地址http://apache.fayea.com/zookeeper/stable/

下载完成之后,解压,然后进入解压目录,将conf/zoo_sample.cfg重命名为zoo.cfg

修改次配置文件:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=D:\\zookeeper\\data
dataLogDir=D:\\zookeeper\\log
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

进入bin目录,以管理员运行zkServer.cmd,启动完成

3、创建maven项目,此文我们是做一个demo,所以直接创建一个多模块项目来区分服务者和消费者

首先我们需要在总工程引入需要使用到的依赖,因为总工程只需要管理依赖即可

<!-- SPRING相关依赖开始 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency >
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version> ${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc </artifactId>
    <version> ${spring.version}</version>
</dependency>
<!-- SPRING相关依赖结束 -->

<!-- 日志相关 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j-api.version}</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>${log4j.version}</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>${slf4j-log4j12.version}</version>
</dependency>
<!-- 日志结束 -->

<!-- VELOCITY模板引擎依赖开始 -->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity</artifactId>
    <version>${velocity.versions}</version>
</dependency>
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-tools</artifactId>
    <version>2.0</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>4.1.3.RELEASE</version>
</dependency>
<!-- VELOCITY模板引擎依赖结束 -->

<!-- dubbo相关依赖开始 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.5.3</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.10</version>
</dependency>
<!-- dubbo相关依赖结束 -->

然后我们需要创建一个jar类型的项目,用来做公共接口,即开发一个jar包,使消费者和服务者都可以使用,例如我们打了一个广告在传单上,而传单就是这个jar包,即我们自己定义的api

创建好dubbo-api这个项目之后,我们需要写一个接口进去,代码如下:

/**
* @author 
* @version $ID: UserService.java, v  2019/2/20 15:24 Exp $
*/
public interface UserService {

    String getName(String userId);
}

此时我们需要创建一个服务者来将这个接口实现,即,我们需要找一个生产商来提供我们打在传单上的这个广告的服务,即我们的服务者,亦可以称之为店家,即创建一个war类型的模块

创建好服务者这个项目之后,我们首先要让这个服务上正常运行,不可以欺骗消费者,那么我们需要先集成spring,编写spring的xml,在web.xml中去声明我们使用了spring,即监听,就比如上诉传单中的广告是一家饭店,那么web.xml就是食品局,我们有什么菜就需要告诉食品局,食品局去监听,这样我么上的菜才可以保证消费者的权益,扯远了,这些完成之后启动工程,没有报错,并且有日志打印,说明我们的spring没有问题,那么我们就可以做我们的dubbo了,首先就是我们需要将广告上的内容给做掉,不然就是骗人了,即实现api中定义的接口,代码如下:

/**
* @author renyf24249
* @version $ID: UserServiceImpl.java, v  2019/2/20 17:26 Exp $
*/
public class UserServiceImpl implements UserService {

    @Override
    public String getName(String userId) {
        return "消费者" + userId;
    }
}

然后我们就可以在电视上告诉大家,我们饭店在什么地方,门牌号多少,有什么菜,即暴露服务给dubbo,而dubbo就是电视,暴露方式为在我们服务者的spring的配置文件中增加如下配置:

<?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:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       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/contexthttp://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd ">

    <context:annotation-config/>

    <!-- 定义了提供方应用信息,用于计算依赖关系。在dubbo-admin 或 dubbo-monitor 会显示这个名字,方便识别 -->
    <dubbo:application name="admin-provider" owner="admin" organization="dubbox"/>
    <!-- 使用zookeeper 注册中心暴露服务,注意要先开启 zookeeper -->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880"/>
    <!-- 用dubbo 协议实现定义好的 api 接口 -->
    <dubbo:service interface="com.dubbo.service.UserService" ref="userService" protocol="dubbo"/>
    <!-- 具体实现接口的bean -->
    <bean id="userService" class="com.dubbo.service.impl.UserServiceImpl"/>
</beans>

这样,我们的服务者的事情就算是做完了,接下来就是等待消费者了,我们再创建一个war类型的模块来模拟消费者

创建好之后我们需要去连接到消息中间件,即在消费者这个工程中的spring配置文件中加入如下配置:

<?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:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       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/contexthttp://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd ">

    <context:annotation-config/>

    <!-- 自动扫描web包 ,将带有注解的类 纳入spring容器管理 -->
    <context:component-scan base-package="com.privates.*">
        <!-- 扫描时跳过 @Controller 注解的JAVA类(控制器) -->
        <context:exclude-filter type="annotation"
                                expression="org.springframework.stereotype.Controller" />
    </context:component-scan>

    <!-- 定义了提供方应用信息,用于计算依赖关系。在dubbo-admin 或 dubbo-monitor 会显示这个名字,方便识别 -->
    <dubbo:application name="user-consumer" owner="user" organization="dubbox"/>
    <!-- 向zookeeper 订阅provider 的地址,由zookeeper 定时推送 -->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <!-- 使用dubbo 协议调用定义好的 api 接口 -->
    <dubbo:reference id="userService" interface="com.dubbo.service.UserService"/>
</beans>

注意:提供应用为dubbo:service,而调用服务是dubbo:registry

我们去调用服务者提供的服务,首先需要引入api,然后调用服务者提供的服务,代码如下

/**
* @author renyf24249
* @version $ID: UserDubboAction.java, v  2019/2/20 15:39 Exp $
*/
@Controller
@RequestMapping("/dubbo")
public class UserDubboAction {

    @Autowired private UserService userService;

    @RequestMapping("/dubbo.htm")
    public String testDubbo(ModelMap modelMap) {
        String result = userService.getName("2");
        UserInfo userInfo = new UserInfo();
        userInfo.setName(result);
        modelMap.addAttribute("bean", userInfo);
        return "user/list";
    }
}

以此顺序启动 zookeeper > 服务者 > 消费者 ,然后访问/dubbo/dubbo.htm,发现数据获取成功

下载zookeeper还是dubbo的可是化程序,不晓得是哪个,反正可以用… 说是可以提供界面化管理dubbo 服务 次系统可以查看消费者和提供者提供的服务

下载地址 https://itmayun.ctfile.com/fs/3011962-230676583

下载好之后,将文件解压到tomcat的webapp路径下,启动tomcat
浏览器输入:http://localhost:8080/dubbo-admin/
默认账号: root 密码:root

就可以看到效果了

demo的源码地址https://github.com/brotherAndy/dubbo

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值