Dubbo入门

来源:互联网 发布:js怎么传值给jsp 编辑:程序博客网 时间:2024/06/07 09:48

dubbo结构图:
这里写图片描述


dubbo管理控制台安装(ubuntu)

  • 必须使用jdk1.7(其他版本不行),否则报错

  • 安装zookeeper(单节点)之后

在zookeeper根目录新建两个文件夹mkdir datamkdir logscd zookeeper-3.4.6/confcp zoo_sample.cfg zoo.cfg
  • 修改zoo.cfg配置文件内容
syncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just# example sakes.dataDir=/home/xialonglei/zookeeper-3.4.6/datadataLogDir=/home/xialonglei/zookeeper-3.4.6/logs# the port at which the clients will connectclientPort=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=1server.1=xialonglei:2888:3888
  • 启动zookeeper
./zkServer.sh start

这里写图片描述
表明zkServer启动成功!

  • 安装tomcat

  • 管理控制台部署代码下载地址:http://download.csdn.net/download/xia744510124/9988189

放到webapps下载解压unzip duubo-admin.war -d ROOThttp://127.0.01:8080

这里写图片描述
表明dubbo管理控制台部署成功!


dubbo监控中心的安装

  • 监控中心的部署代码下载(dubbo-monitor-simple-2.8.4-assembly.tar.gz):http://download.csdn.net/download/xia744510124/9993813
 - 解压 - cd 监控中心的conf文件夹下 - vim dubbo.properties(屏蔽掉广播地址,打开zookeeper注册中心地址,修改dubbo.jetty.port=9090) - cd 监控中心的bin目录下 - ./start.sh - 最好不要将zookeeper服务与监控中心部署在同一台机器上,避免机器挂掉后,注册中心和监控中心都挂掉了
  • 访问http://localhost:9090

dubbo与spring整合

  • 所需要的依赖
<dependencies>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-core</artifactId>        <version>4.2.4.RELEASE</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.5</version>    </dependency>    <dependency>        <groupId>com.101tec</groupId>        <artifactId>zkclient</artifactId>        <version>0.10</version>    </dependency></dependencies>
  • provider.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="provider_1"/>    <!-- 使用multicast广播注册中心暴露服务地址 -->    <!-- <dubbo:registry address="multicast://224.5.6.7:1234"/> -->    <!-- 使用zookeeper注册中心暴露服务地址 即zookeeper的所在服务器ip地址和端口号 -->    <dubbo:registry address="zookeeper://192.168.2.121:2181" />    <!-- 用dubbo协议在20880端口暴露服务 -->    <!-- serializtion 协议序列方式,当协议支持多种序列化方式时使用,默认hessian2        比如:dubbo协议的dubbo,hessian2,java,compactedjava,以及http协议的json等    -->    <dubbo:protocol name="dubbo" port="20880" serialization="json"/>    <!-- 声明需要暴露的服务接口 -->    <dubbo:service interface="com.xll.dubbo.DemoService" ref="demoService"/>    <!-- 和本地bean一样实现服务 -->    <bean id="demoService" class="com.xll.dubbo.provider.DemoServiceImpl"/></beans>
  • consumer.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="consumer_1"/>    <!-- 使用zookeeper注册中心暴露服务地址 即zookeeper的所在服务器ip地址和端口号 -->    <dubbo:registry address="zookeeper://192.168.2.121:2181" />    <dubbo:reference id="demoService" interface="com.xll.dubbo.DemoService"/></beans>
  • 目录结构(intellij idea maven)

这里写图片描述

  • dubbo-provider代码
1. DemoService(接口)代码:package com.xll.dubbo;/** * Created by lonely.xia on 2017/9/18. */public interface DemoService {    String sayHello(String name);}2. DemoServiceImpl.java代码:package com.xll.dubbo.provider;import com.xll.dubbo.DemoService;/** * Created by lonely.xia on 2017/9/18. */public class DemoServiceImpl implements DemoService {    public String sayHello(String name) {        return "name->" + name;    }}3. ProviderMain.java代码package com.xll.dubbo.provider;import com.xll.dubbo.DemoService;import org.springframework.context.support.ClassPathXmlApplicationContext;import java.io.IOException;/** * Created by lonely.xia on 2017/9/18. */public class ProviderMain {    public static void main(String[] args) throws IOException {        ClassPathXmlApplicationContext classPathXmlApplicationContext                = new ClassPathXmlApplicationContext(new String[] {"provider.xml"});        classPathXmlApplicationContext.start();        System.in.read();   // 按任意键退出    }}
  • dubbo-consumer代码
1. DemoService(接口)代码package com.xll.dubbo;/** * Created by lonely.xia on 2017/9/18. */public interface DemoService {    String sayHello(String name);}2. ConsumerMain.java代码package com.xll.dubbo.consumer;import com.xll.dubbo.DemoService;import org.springframework.context.support.ClassPathXmlApplicationContext;import java.io.IOException;/** * Created by lonely.xia on 2017/9/18. */public class ConsumerMain {    public static void main(String[] args) throws IOException {        ClassPathXmlApplicationContext classPathXmlApplicationContext                = new ClassPathXmlApplicationContext(new String[] {"consumer.xml"});        classPathXmlApplicationContext.start();        DemoService demoService = (DemoService) classPathXmlApplicationContext.getBean("demoService");        String hello = demoService.sayHello("xialonglei");        System.out.println("RPC调用结果:" + hello);        System.in.read();   // 按任意键退出    }}
  • 启动服务者和消费者

dubbo过滤器的实现

  • 在服务者中新建一个类
package com.xll.dubbo.filter;import com.alibaba.dubbo.rpc.*;/** * Created by lonely.xia on 2017/9/27.*/public class IpFilter implements Filter {    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {        String ip = RpcContext.getContext().getRemoteHost();        //如果是192.168.148.1机器发起的请求,则可以执行服务调用        if (ip.equals("192.168.148.1")) {            return invoker.invoke(invocation);        } else {            return new RpcResult();        }    }}
  • 在resources文件夹中新建文件META-INF/dubbo/com.alibaba.dubbo.rpc.Filter(文件名必需为这个),文件内容如下
#name=value(name随意起,但value为过滤类路径)ipFilter=com.xll.dubbo.filter.IpFilter
  • 结束

dubbo的文件上传和下载

  • 新建file-facade服务接口模块(这样就可以使服务提供者和消费者共同依赖该模块)

这里写图片描述

  • 新建file-service服务模块,作为服务提供者

这里写图片描述

  • provider.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="provider_2"/>    <!-- 使用multicast广播注册中心暴露服务地址 -->    <!-- <dubbo:registry address="multicast://224.5.6.7:1234"/> -->    <!-- 使用zookeeper注册中心暴露服务地址 即zookeeper的所在服务器ip地址和端口号 -->    <dubbo:registry address="zookeeper://192.168.36.8:2181" />    <!-- 用dubbo协议在20880端口暴露服务 -->    <!-- serializtion 协议序列方式,当协议支持多种序列化方式时使用,默认hessian2        比如:dubbo协议的dubbo,hessian2,java,compactedjava,以及http协议的json等    -->    <dubbo:protocol name="dubbo" port="20880" serialization="json"/>    <!-- 声明需要暴露的服务接口 -->    <dubbo:service interface="com.xll.service.IFileService" ref="fileService" protocol="hessian"/>    <!-- 和本地bean一样实现服务 -->    <bean id="fileService" class="com.xll.service.impl.FileServieImpl"/>    <!-- 默认是以jetty作为服务容器,因此要下载jetty和hessian依赖 -->    <dubbo:protocol name="hessian" port="20887"/></beans>
<dependency>    <groupId>com.caucho</groupId>    <artifactId>hessian</artifactId>    <version>4.0.51</version></dependency><dependency>    <groupId>org.mortbay.jetty</groupId>    <artifactId>jetty</artifactId>    <version>6.1.26</version></dependency>
  • 编写服务启动类
public class ProviderMain {    public static void main(String[] args) throws IOException {        ClassPathXmlApplicationContext classPathXmlApplicationContext                = new ClassPathXmlApplicationContext(new String[] {"provider.xml"});        classPathXmlApplicationContext.start();        System.in.read();  // 按任意键退出    }}
  • 新建file-consumer消费者模块,作为服务的消费者

这里写图片描述

  • 配置pom.xml文件
<dependency>    <groupId>com.xll</groupId>    <artifactId>file-facade</artifactId>    <version>1.0-SNAPSHOT</version></dependency>
  • 配置consumer.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="consumer_2"/>    <!-- 使用zookeeper注册中心暴露服务地址 即zookeeper的所在服务器ip地址和端口号 -->    <dubbo:registry address="zookeeper://192.168.36.8:2181" />    <dubbo:reference id="fileService" interface="com.xll.service.IFileService" timeout="120000"/></beans>
  • 启动服务者和消费者

原创粉丝点击