Dubbo核心玩法一

第一个Dubbo程序:Hello world

创建业务接口工程

我们将这个接口单独抽取出来,打成jar包被多个服务锁依赖

  

创建服务提供者Provider

  

Provider工程的pom文件如下:

    <properties>
        <!--2.6.4版本的duboo依赖的Spring的版本-->
        <spring-version>4.3.16.RELEASE</spring-version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>com.dubbo.test</groupId>
            <artifactId>00-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--dubbo的依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.4</version>
        </dependency>
        <!--Spring的依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</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-beans</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring-version}</version>
        </dependency>
    </dependencies>

spring-dubbo-provider.xml的配置如下所示:

这里需要注意的是xml文件头的问题,一定要注意,否则启动会报异常:

Exception:通配符的匹配很全面, 但无法找到元素 'dubbo:application' 的声明;

<?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="01-first-provider"/>
    <!--注册service ,其就是真正的服务提供者-->
    <bean id="service" class="com.test.service.someServiceImpl"/>
    <!--将service的服务暴露 确定接口,确定实现,使用点对点的方式连接,暂时不是用Zookeeper-->
    <dubbo:service interface="com.test.service.someService"
                   ref="service"
                   registry="N/A" />
</beans>

启动类 providerRun如下所示

/**
 * 启动类
 */
public class providerRun {
    public static void main(String[] args) throws IOException {
        //在容器启动到时候,就把我们的服务注册到注册中心,或者称之为暴露
        //创建Spring容器
        ApplicationContext ac = new ClassPathXmlApplicationContext("spring-dubbo-provider.xml");
        //Spring容器启动
        ((ClassPathXmlApplicationContext) ac).start();     
        //使当前主线程阻塞,以提供持续服务
        System.in.read();
    }
}

创建服务的消费者Consumer

pom.xml内容如下:

 <properties>
        <!--2.6.4版本的duboo依赖的Spring的版本-->
        <spring-version>4.3.16.RELEASE</spring-version>
    </properties><dependencies>
        <dependency>
            <groupId>com.dubbo.test</groupId>
            <artifactId>00-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--dubbo的依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.4</version>
        </dependency>
        <!--Spring的依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</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-beans</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring-version}</version>
        </dependency>
    </dependencies>

spring-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="01-first-consumer"/>
<!--确定服务接口,确定连接方式-->
<dubbo:reference id="someService"
                 interface="com.test.service.someService"
                 url="dubbo://localhost:20880"/>
</beans>

启动类如下所示:

/**
 * consumer启动兼服务消费类
 */
public class consumerRun {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("sprin-dubbo-consumer.xml");
        someService service = (someService) ac.getBean("someService");
        service.hello("Toney");
    }
}

运行测试

我们先启动服务提供者providerRun,再启动消费者consumerRun,观察到如下信息

  

我们通过消费者consumer在自己工程的Spring容器中获取到的someService引用,成功调用了provider工程的hello方法

至于中途是怎么调用的,就要着重关注我们的两个spring配置文件了

使用Zookeeper注册中心

在上一个案列中,我们使用的是直连的方式建立连接,现在我们采用ZK作为我们的注册中心

Dubbo的注册中心官方推荐的就是Zookeeper

工程的话,复制服务提供者和消费者,稍加改动即可

改造服务的提供者Provider

pom.xml文件 增添一个依赖即可:

<!-- ZK的客户端依赖:在进入到阿帕奇孵化器后由zkClient改为curator -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>

配置文件如下所示:增改

使用的是集群的方式,集群机器的先后顺序没有影响

 

<!--声明ZK服务中心 (单机)-->
<!--<dubbo:registry address="zookeeper://192.168.159.159:2181"/>-->
<!--第二中方式声明ZK服务中心 (单机)-->
<!--<dubbo:registry protocol="zookeeper" address="192.68.159.159:2181" />-->
<!--声明ZK服务中心,ZK集群的方式-->
<dubbo:registry address="zookeeper://192.168.159.159:2181?backup=192.168.159.169:2181,192.168.159.179:2181"/>
<!--指定实列名,指定服务接口,不指定url,默认为ZK-->
<dubbo:reference id="someService"
interface="com.test.service.someService"/>

改造服务消费者Consumer

pom.xml 添加一个依赖

<!-- ZK的客户端依赖:在进入到阿帕奇孵化器后由zkClient改为curator -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>

配置文件如下所示: 增改

<!--声明ZK服务中心 (单机)-->
<!--<dubbo:registry address="zookeeper://192.168.159.159:2181"/>-->
<!--第二中方式声明ZK服务中心 (单机)-->
<!--<dubbo:registry protocol="zookeeper" address="192.68.159.159:2181" />-->
<!--声明ZK服务中心,ZK集群的方式-->
<dubbo:registry address="zookeeper://192.168.159.159:2181?backup=192.168.159.169:2181,192.168.159.179:2181"/>
<!--指定实列名,指定服务接口,不指定url,默认为ZK--> <dubbo:reference id="someService" interface="com.test.service.someService"/>

启动Zookeeper的服务

我们指定了ip为192.168.159.159这台机器上的ZK,那我们就启动之,

详情翻阅:https://www.cnblogs.com/msi-chen/p/11068925.html(ZK的单机&集群环境搭建)

运行测试

首运行服务提供者。其次运行服务消费者,我们观察控制台输出

  

再观察消费者的控制台,我做了点修改,得到了返回值并打印:

  

连接单机ZK,集群ZK都已测试通过,暂时就写到这儿吧,我要做一个被写代码耽误的中华小当家(煮夫!!)

转载于:https://www.cnblogs.com/msi-chen/p/11073419.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值