dubbo的简单实现

一 是什么

一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多,dubbo使前后端分离,完成负载均衡。

dubbo架构图

节点角色说明:

Provider: 暴露服务的服务提供方。

Consumer: 调用远程服务的服务消费方。

Registry: 服务注册与发现的注册中心。

Monitor: 统计服务的调用次调和调用时间的监控中心。

Container: 服务运行容器。

调用关系说明:

0. 服务容器负责启动,加载,运行服务提供者。

1. 服务提供者在启动时,向注册中心注册自己提供的服务。

2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

二 怎么做

本案例共有三个工程和一个zookeeper 服务器工程将接口注册在zookeeper中提供服务 客户端工程消费zookeeper中注册的接口服务

1、下载安装zookeeper

  在安装目录下的bin中启动 zkServer

  在zookkeeper中的conf/zoo.cfg中可以看到端口号和一些基本配置

2、接口工程

public interface IUserInfo {
    String queryUserInfo();
}

在这里我使用maven管理项目 打包到本地

3、服务端工程

这里我建的是普通java工程 主要是dao层和service层

   (1)下载相关jar包

使用maven pom文件为

 <dependencies>
        <dependency>
            <groupId>cn.com.study-dubbo-api</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.7</version>
        </dependency>
    </dependencies>

  第一段dependency是我打包到本地的api工程的坐标

  但是这个pom有问题 之后会描述到

  (2)需要提供的服务

@Service("iUserInfo")
public class IUserInfoImpl implements IUserInfo {
    @Override
    public String queryUserInfo() {
        return "aaa";
    }
}

  (3)配置文件(我是把dubbo配置在spring配置文件中的)

    <context:component-scan base-package="cn.com.dubbo.demo"/>
    <dubbo:application name="wd-dubbo-server"/>
    <!--注册中心-->
    <dubbo:protocol name="dubbo" port="20880"/>
    <dubbo:registry address="zookeeper://127.0.0.1:2181" check="false"/>
    <!--服务提供者-->
    <dubbo:service interface="cn.com.api.service.IUserInfo" ref="iUserInfo"/>

  (4)启动服务器工程,通过读取配置文件,并通过CountDownLatch使程序阻塞

public class Test {
    public static void main(String[] args) throws InterruptedException {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
        new CountDownLatch(1).await();
    }
}

  至此服务端结束,并且在zookeeper中可以看到相关信息

4客户端工程

  这里我建的是web工程,controller层和显示界面

  (1)pom.xml

之前提到上面那个pom文件有点问题,主要是用maven下载dubbo包的时候会把加进来导致和自己下载的spring包冲突报异常java.lang.NoSuchMethodError: org.springframework.util.ClassUtils.getMethod。所以要在pom中dubbo包下排除这个包

<dependencies>
        <dependency>
            <groupId>cn.com.study-dubbo-api</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <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.7</version>
        </dependency>
    </dependencies>

  (2)dubbo消费的配置文件(配置在sping的配置文件中,记得在web.xml中读取这个配置文件和spring mvc的配置文件)

 <dubbo:application name="dubbo-cunsumer"/>
    <!--注册中心地址-->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" check="false"/>
    <!--声明接口-->
    <dubbo:reference id="iUserInfo" interface="cn.com.api.service.IUserInfo"/>

  (3)我是通过spring mvc页面请求测试的 ,所以同时配置spring mvc配置文件

<context:component-scan base-package="cn.com.controller"/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

  (4)写请求拦截的controller

@Controller
public class TestController {

    @Autowired
    IUserInfo iUserInfo;

    @RequestMapping("/test")
    @ResponseBody
    public void show(){
        System.out.println(iUserInfo.queryUserInfo());
    }
}

启动tomcat,这个时候可能会提示端口被占用,百度上说是zookeeper启动会占用8080端口,把tomcat启动端口改了,然后启动。

至此dubbo简单案例已经搭建完成。

测试一下,输入请求url

控制台显示信息

本文参考

  http://www.cnblogs.com/ASPNET2008/p/5622005.html

  https://my.oschina.net/wangt10/blog/522799

时间: 2024-12-13 08:56:51

dubbo的简单实现的相关文章

dubbo使用简单说明

现在很流行的Dubbo很多朋友都听说过吧,最近我也在看这方面的东西,分享先我的心得笔记. 很简单重在实现基于zookeeper的dubbo注册. 框架:springmvc+spring+zookeeper+dubbo 项目分三层,model存放数据,view页面展示.controller下面具体逻辑实现.通过dubbo消费方和供应方注册,供应方给消费方暴露接口,供消费方调用.  工程部署需要配置文件有:  applicationContext-dubbo.xml  {--  <-- 消费方应用名

Maven配置dubbo环境简单例子

环境准备: 1.zookeeper:zookeeper-3.4.6版本 2.maven:apache-maven-3.3.9版本 3.dubbo监控工具:dubbo-admin-2.5.4-SNAPSHOT 一个war包,用户查看注册中心的提供者和消费者 项目结构: dubbo-provider-test |--src/main/java 程序目录 |--com.wengen.dubbo_provider_test.service      提供者接口目录 |--DomeService.java

Dubbo入门简单示例

之前用过EJB做分布式系统,前段时间跟人闲聊,发现还是Dubbo+ZK用的比较多,so,自己玩玩儿. 先安装一个zk作为服务注册中心,之后,建个maven工程,pom里面加入如下配置: <dependencies> <!-- dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>

dubbo最简单的例子

1.新建两个maven项目,一个是服务器端的,一个是客户端的 2.服务器端pom.xml添加jar <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupI

dubbo的简单使用

整个过程大致是这样的 1.注册中心使用zookeeper,地址为192.168.192.128:2181! 2.首先服务方 所在的服务器是127.0.0.1:8081 服务方提供的接口: public interface ITestTbService { void insertTestTb(TestTb testTb); } 接口的实现类 @Service("testTbService") @Transactional public class TestTbServiceImpl im

dubbo在项目中的应用

关于dubbo的使用,我们举个简单例子: 存在2个系统,A系统和B系统,A系统调用B系统的接口获取数据,用于查询用户列表. 在上一篇博文介绍了dubbo的创建,zookeeper的创建完成后,我们可以来使用dubbo和zookeeper了? 再回顾下dubbo的架构: 所以通过此图,我们看到就是服务的提供者将服务注册到注册中心,服务的消费者从注册中心获取服务,monitor监控服务的调用. 所谓框架无非就是配置文件+java代码,所以dubbo也同理: (1)首先看下B服务的提供者的配置文件和代

dubbo服务与消费

一.前言 项目中用到了Dubbo,临时抱大腿,学习了dubbo的简单实用方法.现在就来总结一下dubbo如何提供服务,如何消费服务,并做了一个简单的demo作为参考. 二.Dubbo是什么 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架

【Rpc】基于开源Dubbo分布式RPC服务框架的部署整合

一.前言 Dubbo 作为SOA服务化治理方案的核心框架,用于提高业务逻辑的复用.整合.集中管理,具有极高的可靠性(HA)和伸缩性,被应用于阿里巴巴各成员站点,同时在包括JD.当当在内的众多互联网项目中有着广泛应用.dubbo 通过高性能 RPC 实现服务的输出和输入功能,框架基于 Spring Framework 进行无缝集成,使用过程中基本看不到 Dubbo API的直接调用,Dubbo服务支持RMI.Hessian.Dubbo.WebService等众多通信协议,同时提供了对服务的监控和管

dubbu 官方参考手册~备案(防止哪天阿里一生气把dubbo给删除了)

首页  ||  下载  ||  用户指南  ||  开发者指南  ||  管理员指南  ||  培训文档  ||  常见问题解答  ||  发布记录  ||  发展路线  ||  社区 English | 中文 用户指南 入门 背景 需求 架构 用法 快速启动 服务提供者 服务消费者 依赖 必需依赖 缺省依赖 可选依赖 成熟度 功能成熟度 策略成熟度 配置 Xml配置 属性配置 注解配置 API配置 示例 启动时检查 集群容错 负载均衡 线程模型 直连提供者 只订阅 只注册 静态服务 多协议 多