Dubbox分布式框架

Posted superbc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dubbox分布式框架相关的知识,希望对你有一定的参考价值。

一:简介:前身是阿里巴巴的一个开源的项目,后来停止维护,由当当网继续维护,它致力于rpc远程的调度方案.是一个服务框架

二:执行原理图:

技术分享图片

 

 

节点角色说明:

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

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

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

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

· Container: 服务运行容器。

 

调用关系说明:

 

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

 

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

 

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

 

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

 

送变更数据给消费者。

 

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

 

如果调用失败,再选另一台调用。

 

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

 

数据到监控中心。

三:使用

1.建议使用zookper注册中心(zookper是Apacahe 的子项目)安装到linux系统上

2.Dubbox本地jar包部署,maven中央仓库没有需要手动安装

 

先将dubbo-2.8.4.jar包放到d:setup, 然后输入命令(jar包自行下载)

 

mvn install:install-file -Dfile=d:setupdubbo-2.8.4.jar -DgroupId=com.alibaba -DartifactId=dubbo -Dversion=2.8.4 -Dpackaging=jar

3.入门demo

  1.服务提供者,创建Maven工程(WARdubboxdemo-service  ,在pom.xml中引入依赖

 

<properties>

 

<spring.version>4.2.4.RELEASE</spring.version>

 

   </properties>    

 

<dependencies>

 

<!-- Spring 相关 -->

 

<dependency>

 

  <groupId>org.springframework</groupId>

 

  <artifactId>spring-context</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-webmvc</artifactId>

 

  <version>${spring.version}</version>

 

</dependency>

 

<dependency>

 

  <groupId>org.springframework</groupId>

 

  <artifactId>spring-jdbc</artifactId>

 

  <version>${spring.version}</version>

 

</dependency>

 

<dependency>

 

  <groupId>org.springframework</groupId>

 

  <artifactId>spring-aspects</artifactId>

 

  <version>${spring.version}</version>

 

</dependency>

 

<dependency>

 

  <groupId>org.springframework</groupId>

 

  <artifactId>spring-jms</artifactId>

 

  <version>${spring.version}</version>

 

</dependency>

 

<dependency>

 

  <groupId>org.springframework</groupId>

 

  <artifactId>spring-context-support</artifactId>

 

  <version>${spring.version}</version>

 

</dependency>

 

 

<!-- dubbo相关 -->

 

<dependency>

 

  <groupId>com.alibaba</groupId>

 

  artifactId>dubbo</artifactId>

 

  <version>2.8.4</version>

 

</dependency>

 

<dependency>

 

  <groupId>org.apache.zookeeper</groupId>

 

  <artifactId>zookeeper</artifactId>

 

  <version>3.4.6</version>

 

</dependency>

 

<dependency>

 

  <groupId>com.github.sgroschupf</groupId>

 

  <artifactId>zkclient</artifactId>

 

  <version>0.1</version>

 

</dependency>

 

<dependency>

 

  <groupId>javassist</groupId>

 

  <artifactId>javassist</artifactId>

 

  <version>3.11.0.GA</version>

 

</dependency>

2)在工程的webapps下创建WEB-INF文件夹,创建web.xml

<!-- 加载spring容器 -->

<context-param>

  <param-name>contextConfigLocation</param-name>

  <param-value>classpath:applicationContext*.xml</param-value>

</context-param>

  <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

3)创建业务接口

创建包cn.itcast.dubbodemo.service,用于存放业务接口,创建接口

技术分享图片

4)创建业务实现类

创建包cn.itcast.dubbodemo.service.impl ,用于存放业务实现类。创建业务实现类:

技术分享图片

 

 注意:Service注解与原来不同,需要引入com.alibaba包下的

 

5)编写配置文件

src/main/resources下创建applicationContext-service.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:p="http://www.springframework.org/schema/p"

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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd

        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd

        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

     

<dubbo:application name="dubboxdemo-service"/>  

<dubbo:registry address="zookeeper://192.168.25.132:2181"/><!--虚拟机上的ip-->

<dubbo:annotation package="cn.itcast.dubboxdemo.service" />

</beans>

 

 

 注意:dubbo:annotation用于扫描@Service注解

2.服务消费者开发

创建Maven工程(WARdubboxdemo-web ,在pom.xml引入依赖 ,同“dubboxdemo-service”工程

 

2)在webapps目录下创建WEB-INF 目录,并创建web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

version="2.5">

   <!-- 解决post乱码 -->

<filter>

<filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>utf-8</param-value>

</init-param>

<init-param>  

            <param-name>forceEncoding</param-name>  

            <param-value>true</param-value>  

        </init-param>  

</filter>

<filter-mapping>

<filter-name>CharacterEncodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

  <servlet>

   <servlet-name>springmvc</servlet-name>   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

   <!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载-->

   <init-param>

   <param-name>contextConfigLocation</param-name>

   <param-value>classpath:applicationContext-web.xml</param-value>

   </init-param>

  </servlet>  

  <servlet-mapping>

   <servlet-name>springmvc</servlet-name>

   <url-pattern>*.do</url-pattern>

  </servlet-mapping>

</web-app>

 

 

 3)拷贝业务接口

 

dubboxdemo-service”工程的cn.itcast.dubboxdemo.service 包以及下面的接口拷贝至此工程。

 

 4)编写Controller

技术分享图片

5)编写spring配置文件

src/main/resources下创建applicationContext-web.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:p="http://www.springframework.org/schema/p"

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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd

        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd

        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

 

<mvc:annotation-driven >

<mvc:message-converters register-defaults="false">

<bean class="org.springframework.http.converter.StringHttpMessageConverter">  

<constructor-arg value="UTF-8" />

</bean>  

</mvc:message-converters>

</mvc:annotation-driven>

<!-- 引用dubbo 服务 -->

<dubbo:application name="dubboxdemo-web" />

<dubbo:registry address="zookeeper://192.168.25.132:2181"/>

     <dubbo:annotation package="cn.itcast.dubboxdemo.controller" />

</beans>

 

 

接下来测试运行

3.6管理中心的部署(百度一下看看怎么使用安装部署)

 

 

 

 

以上是关于Dubbox分布式框架的主要内容,如果未能解决你的问题,请参考以下文章

Dubbox简单理解

前后端分离分布式项目开发-Dubbox框架

dubbox系列——dubbox简介

Linux下安装Dubbox

分布式事务tcc-transaction分布式TCC型事务框架搭建与实战案例(基于Dubbo/Dubbox)

dubbox