02 dubbo系列 | 基于spring加载dubbo配置

前言

本文主要dubbo和spring的结合使用,在spring配置文件中配置dubbo的相关信息。

同时,本文代码基于01 dubbo系列 | dubbo快速入门

环境

需要引入spring相关的依赖。

第一步:dubbo-demo-provider模块配置用spring暴露服务。

<?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://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    
    <!--实现的服务-->
    <bean id="demoServiceImpl" class="com.joyxj.dubbo.demo.provider.DemoServiceImpl" />
    <bean id="userServiceImpl" class="com.joyxj.dubbo.demo.provider.UserServiceImpl" />

    <!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="dubbo-demo-provider">
        <!--在线运维命令配置-->
        <dubbo:parameter key="qos.enable" value="true"/>
        <dubbo:parameter key="qos.accept.foreign.ip" value="false"/>
        <dubbo:parameter key="qos.port" value="22222"/>
    </dubbo:application>
    <!--dubbo 注册中心-->
    <dubbo:registry address="zookeeper://localhost:2181" />
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880"/>
    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="com.joyxj.dubbo.demo.api.DemoService" ref="demoServiceImpl" />
    <dubbo:service interface="com.joyxj.dubbo.demo.api.UserService" ref="userServiceImpl"/>
</beans>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

第二步:dubbo-demo-provider模块启动类。

package com.joyxj.dubbo.demo.provider;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

/**
 * 基于spring的提供方启动类
 *
 * @author xiaoj
 * @version 1.0
 * @date 2019-04-18
 */
public class SpringProviderApplication {

    public static void main(String[] args) {
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("application-provider.xml");
        context.start();
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

第三步:dubbo-demo-consumer模块配置用spring调用远程服务。

<?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://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

    <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
    <dubbo:application name="dubbo-demo-cosumer" >
        <dubbo:parameter key="qos.enable" value="true"/>
        <dubbo:parameter key="qos.accept.foreign.ip" value="false"/>
        <dubbo:parameter key="qos.port" value="33333"/>
    </dubbo:application>
    <!--dubbo 注册中心-->
    <dubbo:registry address="zookeeper://localhost:2181" />

    <dubbo:reference interface="com.joyxj.dubbo.demo.api.DemoService"  id="demoService"/>
    <dubbo:reference interface="com.joyxj.dubbo.demo.api.UserService" id="userService"/>

</beans>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

第四步:dubbo-demo-consumer模块启动类,加载spring配置和调用服务。

package com.joyxj.dubbo.demo.consumer;

import com.joyxj.dubbo.demo.api.DemoService;
import com.joyxj.dubbo.demo.api.UserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 基于spring的消费方启动类
 *
 * @author xiaoj
 * @version 1.0
 * @date 2019-04-18
 */
public class SpringConsumerApplication {

    public static void main(String[] args) {
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("application-consumer.xml");
        DemoService demoService = (DemoService) context.getBean("demoService");
        UserService userService = (UserService) context.getBean("userService");
        System.out.println(demoService.sayHello("xiaojun"));
        System.out.println(userService.getAge("xiaojun"));
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

总结

本文主要是介绍了dubbo和spring的一个整合,官方推荐使用XML的方式,也就是基于spring的配置,同时这种方式也非常方便的进行本地开发调试。

上次更新: 2 个月前