spring整合dubbo-2.5.3(使用TCP广播或者zookeeper 暴露和发现服务)

来源:互联网 发布:大数据知识框架 编辑:程序博客网 时间:2024/05/16 05:25

dubbo官方文档,写的很详细

dubbo需要的jar

dubbo-2.5.3.jar
javassist-3.15.0-GA.jar
netty-3.2.5.Final.jar
zkclient-0.1.jar
zookeeper-3.5.1-alpha.jar

dubbo消费提供者

接口package com.lp.dubbo.demo;import java.io.Serializable;public interface ProviderDemoService {    public String sayHello(String name);    public User getUser();    static class User implements Serializable{        private static final long serialVersionUID = 1L;        private String name;        private int age;        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }        public int getAge() {            return age;        }        public void setAge(int age) {            this.age = age;        }        @Override        public String toString() {            return "name=" + name + ",age=" + age;        }    }}接口实现类package com.lp.dubbo.demo;public class ProviderDemoServiceImpl implements ProviderDemoService {    @Override    public String sayHello(String name) {        return "Hello " + name;    }    @Override    public User getUser() {        User user = new User();        user.setName("lp");        user.setAge(26);        return user;    }}配置文件dubbo-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">    <!-- 具体的实现bean -->    <bean id="demoService" class="com.lp.dubbo.demo.ProviderDemoServiceImpl" />    <!-- 提供方应用信息,用于计算依赖关系 -->    <dubbo:application name="xixi_provider" />    <!-- 使用multicast广播注册中心暴露服务地址 -->    <dubbo:registry  address="multicast://224.1.1.1:12345" />    <!-- 用dubbo协议在20880端口暴露服务 -->    <dubbo:protocol name="dubbo" port="20881" />    <!-- 声明需要暴露的服务接口 -->    <dubbo:service interface="com.lp.dubbo.demo.ProviderDemoService" ref="demoService" /></beans>测试代码package com.lp.dubbo.demo;import java.io.IOException;import org.springframework.context.support.ClassPathXmlApplicationContext;public class ProviderTest {    public static void main(String[] args) throws IOException {        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-provider.xml");        //保证主线不会死掉        System.in.read(); // 按任意键退出    }}

dubbo 服务消费者

接口(与服务提供者的接口是一模一样的)package com.lp.dubbo.demo;import java.io.Serializable;public interface ProviderDemoService {    public String sayHello(String name);    public User getUser();    static class User implements Serializable{        private static final long serialVersionUID = 1L;        private String name;        private int age;        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }        public int getAge() {            return age;        }        public void setAge(int age) {            this.age = age;        }        @Override        public String toString() {            return "name=" + name + ",age=" + age;        }    }}配置文件 dubbo-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-of-helloworld-app"  />    <!-- 使用multicast广播注册中心发现服务地址 -->     <dubbo:registry address="multicast://224.1.1.1:12345" />    <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->    <dubbo:reference id="demoService" interface="com.lp.dubbo.demo.ProviderDemoService" /></beans>测试代码package com.lp.dubbo.demo;import java.io.IOException;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.lp.dubbo.demo.ProviderDemoService.User;public class ConsumerTest {    public static void main(String[] args) throws IOException {        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-consumer.xml");        ProviderDemoService demoService = (ProviderDemoService)context.getBean("demoService"); // 获取远程服务代理        User user = demoService.getUser();        System.out.println(user);    }}

进行测试

先运行 ProviderTest, 再 运行 ConsumerTest。
输出结果
name=lp,age=26

上面的xml配置是使用 TCP广播进行 服务暴露和服务发现的,其实可以使用zookeeper实现暴露和服务发现,但是需要安装zookeeper,zookeeper安装教程。
如果你的zookeeper是集群,将

<dubbo:registry  address="multicast://224.1.1.1:12345" />替换为<dubbo:registry protocol="zookeeper" address="192.168.17.129:2181,192.168.17.129:2182,192.168.17.129:2183" /> 或者<dubbo:registry address="zookeeper://192.168.17.129:2181?backup=192.168.17.129:2182,192.168.17.129:2183" />服务提供者和服务消费者做相同的修改

如果你的zookeeper是单机的,将

<dubbo:registry  address="multicast://224.1.1.1:12345" />替换为<dubbo:registry  address="zookeeper://224.1.1.1:12345" />服务提供者和服务消费者做相同的修改

dubbo还有很多功能,自己也在学习中,更多的信息请查看dubbo官方文档。

2 0
原创粉丝点击