一 是什么

一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多,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

dubbo的简单实现的更多相关文章

  1. dubbo+zookeeper简单环境搭建

    dubbo+zoopeeper例子 [TOC] 标签(空格分隔): 分布式 dubbo dubbo相关 dubbo是目前国内比较流行的一种分布式服务治理方案.还有一种就是esb了.一般采用的是基于Ap ...

  2. dubbo的简单应用

    一. dubbo简介 dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架. 二. 架构 引用dubbo的架构图: Provide ...

  3. dubbo服务简单搭建

    一.初识dubbo: 架构图: Provider: 暴露服务的服务提供方. Consumer: 调用远程服务的服务消费方. Registry: 服务注册与发现的注册中心. Monitor: 统计服务的 ...

  4. MAC环境下idea:maven+Spring+Dubbo+Zookeeper简单工程搭建

    : 一:安装软件:tomcatZookeeperDubbo+admin 二:工程: 总工程  API    Pom.xml:不用引用任何东西  Provider    Pom.xml:要denpend ...

  5. springboot整合dubbo的简单案例

    使用框架: jdk 1.8 springboot-2.1.3 dubbo-2.6 spring-data-jpa-2.1.5 一.开发dubbo服务接口: 按照Dubbo官方开发建议,创建一个接口项目 ...

  6. springboot搭建dubbo+zookeeper简单案例

    背景:只是自己使用单机版zookeeper搭建dubbo的一个学习案例,记录成功的过程 1.搭建zookeeper坏境 使用docker来构建环境 1.1 拉取镜像:docker pull zooke ...

  7. dubbo的简单使用

    整个过程大致是这样的 1.注册中心使用zookeeper,地址为192.168.192.128:2181! 2.首先服务方 所在的服务器是127.0.0.1:8081 服务方提供的接口: public ...

  8. Maven配置dubbo环境简单例子

    环境准备: 1.zookeeper:zookeeper-3.4.6版本 2.maven:apache-maven-3.3.9版本 3.dubbo监控工具:dubbo-admin-2.5.4-SNAPS ...

  9. Dubbo + Zookeeper 简单配置

    Dubbo + Zookeeper Zookeeper 下载及配置 下载到本机/usr/local目录 wget https://mirrors.tuna.tsinghua.edu.cn/apache ...

随机推荐

  1. eeclipse使用快捷键

    eclipse块注释: 方式一:多行“//”注释 在Eclipse中拖动鼠标,选中需要注释的代码 Ctrl+Shift+C会发现所选代码被“//”注释掉.当调试完后,可再次按住Ctrl+Shift+C ...

  2. http状态码及解释

    简单版: 100  Continue   继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息 200  OK         正常返回 ...

  3. 使用国内docker镜像源

    在国内,通过Docker的pull和push命令访问hub.docker时,网络十分慢,而且会出现各种各样的网络连接问题.因此这里介绍下如何使用国内的镜像源,这里以DaoCloud为例. 注册DaoC ...

  4. 漂亮的代码3:flatten 一个数组

    看到一个题目: flatten([1,2,3]) // => [1,2,3] flatten([[1,2,3],["a","b","c" ...

  5. 规范 : Sql statusEnum

    statusEnum 的诞生是为了在看Sql 表时,可以知道他是一个有特别的string的分类,在扩张或修改时,可以方便追踪到c#, e.g. 如果是“称呼”(column title),在sql没有 ...

  6. PDO预处理语句规避SQL注入攻击

    所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存 ...

  7. VUE2.0实现购物车和地址选配功能学习第七节

    第七节 卡片选中,设置默认 1.卡片选中html:<li v-for="(item,index) in filterAddress" v-bind:class="{ ...

  8. JavaScript中的文档模式和严格模式

    JavaScript中的文档模式和严格模式 语法模式有普通模式和严格模式两种 普通模式:正常的JavaScript语法拼写以及代码编写(相对于严格模式存在着语法上的不严谨),尽可能的识别错误以及不规范 ...

  9. Python 正则表达式(字符)详解

    Python正则表达式 - 简介 ​    其实正则表达式这种技术,源于一个很简单的问题:  如何通过变成使得计算机具有在文本中检索某种模式的能力? ​     而正则表达式为通过编程实现高级的文本模 ...

  10. 五金配件行业ERP解决方案

    五金行业信息化需求分析 “国内竞争国际化,国际竞争国内化”将是近几年我国五金行业发展的特点,中国作为全球五金制造中心的地位将进一步稳固.随着中国融入全球经济环境进程的加快以及经济实力的快速崛起,中国已 ...