首页 > 其他 > 详细

Dubbo入门核心玩法一

时间:2019-06-23 17:48:02      阅读:120      评论:0      收藏:0      [点我收藏+]

第一个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" />-->
   
    <!--将service的服务暴露 确定接口,确定实现,确定服务暴露给ZK 不指定就是默认ZK-->
    <dubbo:service interface="com.test.service.someService"
                   ref="service" />

改造服务消费者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"/>
    <!--指定实列名,指定服务接口,不指定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的单机&集群环境搭建)

运行测试

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

  技术分享图片

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

  技术分享图片

暂时就写到这儿吧,我要做一个被写代码耽误的中华小当家(煮夫!!)

Dubbo入门核心玩法一

原文:https://www.cnblogs.com/msi-chen/p/11073419.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!