zoukankan      html  css  js  c++  java
  • Spring Boot + Dubbo 可运行的例子源码-实现服务注册和远程调用

    最近公司的一个分布式系统想要尝试迁移到Dubbo,项目本身是Spring Boot的,经过一些努力,最终也算是搭建起一个基础的框架了,放到这里记录一下。需要依赖一个外部的zookeeper。

    源码地址:点我 

    项目结构:

    Maven构建的Spring Boot 多模块项目,provide为服务提供者,开放出接口供外部访问;consume为服务消费者,RPC调用provide提供的服务。

    Provide

    Dubbo配置类:

    @Configuration
    @PropertySource("classpath:dubbo/dubbo.properties")
    @ImportResource({ "classpath:dubbo/*.xml" })
    public class DubboConfig {
    
    }

    在resources下新建dubbo文件,并添加 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">
    
        <dubbo:application name="${dubbo.application.name}"/>
    
    
        <dubbo:registry protocol="${dubbo.registry.protocol}" address="${dubbo.registry.address}"/>
    
        <dubbo:protocol name="${dubbo.protocol.name}" port="${dubbo.protocol.port}"/>
    
        <dubbo:service interface="com.csonezp.TestService"
                       ref="testService" retries="0" timeout="6000"/>
    </beans>

    dubbo.properties文件:

    #应用名称
    dubbo.application.name=example-provider
    #注册中心类型
    dubbo.registry.protocol=zookeeper
    #注册中心地址
    dubbo.registry.address=127.0.0.1:2181
    #暴露服务方式
    dubbo.protocol.name=dubbo
    #暴露服务端口
    dubbo.protocol.port=20880
    com.csonezp.TestService:

    public interface TestService {
        String test();
    }
    TestServiceImpl:
    @Service("testService")
    public class TestServiceImpl implements TestService {
        @Override
        public String test() {
            return "message from provide";
        }
    }

    xml文件中的 ref="testService" 很重要,后面consume需要通过这个来进行RPC访问。

    Consume

    Dubbo配置类:

    /**
     * Created by csonezp on 2017/9/14.
     */
    @Configuration
    @PropertySource("classpath:dubbo/dubbo.properties")
    @ImportResource({ "classpath:dubbo/*.xml" })
    public class DubboConfig {
    }

    在resources下新建dubbo目录,添加dubbo-consume.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="${dubbo.application.name}"/>
    
        <dubbo:registry protocol="${dubbo.registry.protocol}" address="${dubbo.registry.address}"/>
    
        <dubbo:reference id="testService" interface="com.csonezp.TestService"/>
    </beans>

    这个id 就是Provide里设置的ref,不要错了;

    dubbo.properties文件:

    #应用名称
    dubbo.application.name=example-consume
    #注册中心类型
    dubbo.registry.protocol=zookeeper
    #注册中心地址
    dubbo.registry.address=127.0.0.1:2181

    TestService:

    /**
     * Created by csonezp on 2017/9/14.
     */
    public interface TestService {
        String test();
    }

    仅需要一个接口,不需要实现,通过远程调用来调用Provide的具体实现;

    TestController:具体测试入口,调用远程Provide的实现:

    @RestController
    public class TestController {
    
        @Autowired
        TestService testService;
        @RequestMapping("/test")
        public Object test() {
            return testService.test();
        }
    }

    还需要修改一下consume的端口,防止冲突,在consume的application.properties加入:

    server.port=8081

    现在将Provide和Consume都启动,然后访问 localhost:8081/test,这时会得到:

    可知项目已经正确的执行了远程调用。

  • 相关阅读:
    Win10版《芒果TV》全平台直播第89届奥斯卡颁奖典礼,特设第二演播室带来一手资讯
    Win10《芒果TV》商店版跻身Windows商店《热门免费应用》前12强
    Win10《芒果TV》商店版更新v3.2.6:修复后台任务故障,优化推送频次
    Win10《芒果TV》商店版更新v3.2.5:新增会员频道,修复多处细节问题,小年快乐
    Win10《芒果TV》商店版2016-2017春节大礼,每日前100名用户免费领取7天VIP
    Win10版《芒果TV》获评2016年度Windows Store最佳官方/休闲娱乐应用(LiveSino和微软信仰中心联合评选)
    [Cocos2d-x for WP8学习笔记] 一些基本概念,建立自己的启动界面
    [Cocos2d-x for WP8学习笔记] HelloWorld结构分析
    [Cocos2d-x for WP8学习笔记] HelloWorld
    WindowsPhone使用HtmlAgilityPack解析HTML
  • 原文地址:https://www.cnblogs.com/csonezp/p/7519568.html
Copyright © 2011-2022 走看看