springboot整合dubbo(xml形式)[通俗易懂]

dubbo是一个远程服务调用的分布式框架。让我们告别了webservice的wsdl调用方式,取而代之的是服务注册和服务消费模式。下面对dubbo的组成做一个简单的解释,为的是读者能更好的理解下面的代码dubbo在结构上一共分为4个部分。1.provider:服务的提供者,将服务注册到Registry中,供外界调用。2.container:服务容器(加载dubbo配置文件,将配置文件…

大家好,又见面了,我是你们的朋友全栈君。

dubbo是一个远程服务调用的分布式框架。让我们告别了webservice的wsdl调用方式,取而代之的是服务注册和服务消费模式。下面对dubbo的组成做一个简单的解释,为的是读者能更好的理解下面的代码
dubbo在结构上一共分为4个部分。
1 .provider:服务的提供者,将服务注册到Registry中,供外界调用。
2 .container:服务容器 ( 加载dubbo配置文件,将配置文件中的服务部署运行 )
3 .registry:服务的注册中心(本篇使用zookeeper)
3 .consumer:服务的消费者,消费提供者注册的服务。
4 .monitor:统计中心(主要统计服务的调用次数和调用时间)

上述4部分之间的关系为:(原图引自:springboot整合dubbo)
在这里插入图片描述
关于dubbo的详细介绍可以查看 dubbo的详细解释。文章写的很好,想详细了解dubbo,可以阅读这篇帖子。

首先我们在相应的提供者工程中需要导入dubbo的依赖

<!--springboot和dubbo整合-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
            </exclusions>
            <version>2.5.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.7</version>
            <exclusions>
                <exclusion>
                    <groupId>slf4j-log4j12</groupId>
                    <artifactId>org.slf4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--zookeeper原生API,经常会发生session expire异常。此依赖可以解决这个问题-->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

引入依赖之后,开始写提供者代码。

定义一个bean

public class UserCredenceInfoVO implements Serializable {
   
    private String uciFlowno;
    private String uniqueid;
    private String loginName;
    private String credenceClass;
    private String credenceAppend;
    private String credenceStatus;
}

dubbo是靠接口发布服务,写一个测试接口,用来发布。

public interface UserCredenceReadService {
    public UserInfoVO findUserInfoByLoginName(UserCredenceInfoVO userCredenceInfoInfoVO);
}

接口对应的实现类为:

@Service
public class UserCredenceReadServiceImpl implements UserCredenceReadService {
    @Override
    public UserInfoVO findUserInfoByLoginName(UserCredenceInfoVO userCredenceInfoInfoVO) {
        try {
            UserInfoVO userInfoVO = new UserInfoVO();
            String loginName = userCredenceInfoInfoVO.getLoginName();
            System.out.println(loginName);
    }
}

上面的@Service注解是Spring的注解,不是dubbo的。

之后,我们开始写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="meteor-provider" />
    <dubbo:registry protocol="zookeeper" address="zookeeper://177.177.177.177:2182?backup=177.177.177.178:2182,177.177.177.179:2182" />
    <dubbo:protocol name="dubbo" port="20880" />
    <dubbo:service interface="cn.org.meteor.comp.service.userinfo.UserCredenceReadService" ref="userCredenceReadServiceImpl" version="1.0.0" />
</beans>

zk使用的是集群模式,如果是单机模式。zk地址写法为:

<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" client="zkclient" />

xml定义好之后,我们要在springboot的主类上扫描这个配置文件。

@EnableAutoConfiguration
@SpringBootApplication
@ComponentScan(basePackages = "cn.org.meteor.comp")
@ImportResource("classpath:dubbo-provider.xml")
public class Application {
    /**
     * 核心启动类
     * @param args
     */
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

关于如何搭建一个简单的springboot工程,可以看我之前的博客
搭建一个简单的springboot版的ssm框架
上面的工作完成后,我们的提供者就定义好了。
然后通过dubbo控制台服务治理模块就可以看到我们注册的服务。
dubbo控制台查看服务的注册
dubbo的控制台,服务是一个dubbo-admin的war包。
如果需要下载这个war包,可以去这个博客,里面分享了一个地址可以下载。
dubbo-admin.war 下载

提供者搞定,下面我们开始写消费者,测试我们的提供者服务。

消费者消费服务,也需要接口支持,推荐的做法是将提供者的接口发布到nexus上。然后,消费者直接引用,很方便。

定义消费者xml文件

<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="meteor-consumer"/>
    <!--注册中心地址-->
    <dubbo:registry protocol="zookeeper" address="zookeeper://177.177.177.177:2182?backup=177.177.177.178:2182,177.177.177.179:2182" />
    <dubbo:annotation package="cn.org.meteor.comp.service.userinfo" />
    <dubbo:reference interface="cn.org.meteor.comp.service.userinfo.UserCredenceReadService" id="userCredenceReadService" version="1.0.0" timeout="5000" />

</beans>

dubbo的超时时间默认为1000ms,这里定义为5000ms

在主类中扫描这个文件

@SpringBootApplication
@ImportResource("classpath:dubbo-consumer.xml")
public class Application {
    /**
     * 核心启动类
     * @param args
     */
    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }
}

然后写一个测试类,测试我们是否可以调通发布的服务

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
public class TestUserCredence {
    @Autowired
    UserCredenceReadService userCredenceReadService;

    @Test
    public void test_userCredence() {
        UserCredenceInfoVO userCredenceInfoVO = new UserCredenceInfoVO();
        userCredenceInfoVO.setLoginName("wyy");
 		userCredenceReadService.findUserInfoByLoginName(userCredenceInfoVO);
    }
}

执行test方法,然后查看服务提供端是否打印了我们设置的登录名。
如果有什么问题,欢迎留言。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126777.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python中if __name__ == ‘__main__‘:的作用和原理

    Python中if __name__ == ‘__main__‘:的作用和原理if__name__==’__main__’:的作用一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是import到其他的python脚本中被调用(模块重用)执行。因此if__name__==’main’:的作用就是控制这两种情况执行代码的过程,在if__name__==’main’:下的代码只有在第一种情况下(即文件作为脚本直接执行)才会…

    2022年6月1日
    36
  • webStorm快捷键整理「建议收藏」

    webStorm快捷键整理「建议收藏」一些自己会用的webstorm快捷键,持续更新

    2022年6月23日
    36
  • Python+OpenCV实时图像处理「建议收藏」

    Python+OpenCV实时图像处理「建议收藏」初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试有一定帮助。

    2022年5月7日
    146
  • arduino连接ps2手柄控制智能小车实践记录-续

    arduino连接ps2手柄控制智能小车实践记录-续首先感谢参考链接:感谢参考链接:https://www.cnblogs.com/hxxhdaily/p/12592043.html前篇链接-arduino连接ps2手柄控制智能小车实践记录本篇主要任务:接电机根据控制调整电机旋转方向解决初始化时手柄检测问题(每次启动未必能找到手柄)任务一:接电机电机控制芯片:L298N(淘宝购)电机供电:9V电池(淘宝购电池盒)L298N-电池接线电池电极L298N插口正极12V负极GNDL298N-ard

    2022年6月3日
    33
  • Python二级备考笔记4 同心圆

    Python二级备考笔记4 同心圆1Turtle绘图题:同心圆类型:Turtle绘图‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪

    2022年7月6日
    20
  • 傅里叶变换与希尔伯特变换的区别_配音演员鱼冻毕业于什么学校

    傅里叶变换与希尔伯特变换的区别_配音演员鱼冻毕业于什么学校1.   傅里叶变换1.1傅里叶变换对周期信号进行傅里叶变换(包括正弦周期和非正弦周期信号,正弦周期实际上利用正交性可以知道,除了对应的频率,其他谐波的积分都是0),可以将信号分解为一个无穷级数的和:其中T为原周期信号的频率,因此,整个傅里叶变换将原信号分解为包括原周期在内的无数个谐波分量的三角集数和。对于非周期信号,实际上,非周期信号可以被理解为周期为无限短的周期信号,因此,级数和也自然变成了积…

    2022年10月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号