美文网首页
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