美文网首页
Dubbo学习(四)SpringMVC整合

Dubbo学习(四)SpringMVC整合

作者: 万总有点菜 | 来源:发表于2017-12-05 19:17 被阅读58次

    Spring配置文件


    提供者和消费者,分别为两个spring工程

    提供者

        <description>Spring Configuration</description>
    
    <!-- 提供方应用信息,用于计算依赖关系 -->
        <dubbo:application name="demo-provider"/>
    
        <!-- 使用multicast广播注册中心暴露服务地址 -->
        <dubbo:registry id="myzk" address="127.0.0.1:2181" protocol="zookeeper"/>
    
        <!-- 用dubbo协议在20880端口暴露服务 -->
        <dubbo:protocol id="mydubbo" name="dubbo" port="20880"/>
    
        <dubbo:provider registry="myzk" protocol="mydubbo"/>
        <!-- 使用注解方式暴露接口 -->
        <dubbo:annotation package="com.sima.testa" />
    

    消费者

       <description>Spring MVC Configuration</description>
        <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
        <dubbo:application name="demo-consumer"/>
    
        <!-- 使用multicast广播注册中心暴露发现服务地址 -->
        <!--<dubbo:registry address="multicast://224.5.6.7:1234"/>-->
        <dubbo:registry id="zk" address="127.0.0.1:2181" protocol="zookeeper"/>
    
        <dubbo:consumer registry="zk"/>
        <!-- 使用注解方式暴露接口 -->
        <dubbo:annotation package="com.sima.testb" />
    

    pom配置

    #接口文件导入
            <dependency>
                <groupId>com.maple.dubbodemo</groupId>
                <artifactId>dubbo-api</artifactId>
                <version>1.0-SNAPSHOT</version>
                <scope>system</scope>
                <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/dubbo-api-1.0-SNAPSHOT.jar</systemPath>
            </dependency>
    

    其余pom配置见Dubbo学习(三)HelloWorld

    提供者服务实现-注解方式

    使用@Service

    import com.alibaba.dubbo.rpc.RpcContext;
    import org.springframework.stereotype.Service;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    /**
     * Created by maple on 2017-10-26.
     */
    @Service
    @com.alibaba.dubbo.config.annotation.Service
    public class HelloServiceImpl implements HelloService {
        public String sayHello(String content) {
            System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + content + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
            return "Hello " + content + ", response form provider: " + RpcContext.getContext().getLocalAddress();
        }
    }
    

    消费者使用-注解方式

    使用@Reference

    @Controller
    @RequestMapping(value = "${adminPath}/test/testData")
    public class TestDataController extends BaseController {
    
        @Reference
        HelloService helloService;
    
        @RequestMapping(value = "testService")
        @ResponseBody
        public String testService( ) {
            String s = "helloService is null";
            if (null == helloService){
                return s;
            }
            try {
                s = helloService.sayHello("test");
            }catch (Exception e){
                e.printStackTrace();
            }
            System.out.println("=======" + s);
            return s;
        }
    }
    

    注意

    注解无效,空指针

    原因:spring 扫描的时候无法识别@Reference ,dubbo的扫描也无法识别Spring @Controller,如果先扫了controller,这时候把控制器都实例化好了,再扫dubbo的服务,就会出现空指针。因此,提供者先扫描spring框架,完成spring部分的扫描,然后将为dubbo框架提供服务;消费者部分相反,先扫描dubbo服务,后扫描spring部分

    事务注解问题@Transactional

    被事务代理的spring service 使用注解方式发布Dubbo服务

    相关文章

      网友评论

          本文标题:Dubbo学习(四)SpringMVC整合

          本文链接:https://www.haomeiwen.com/subject/vtyrpxtx.html