spring boot / dubbo demo

本文编写日期:2019/09/06

参考git源码:

dubbo-spring-boot-starter: https://github.com/alibaba/dubbo-spring-boot-starter

dubbo-spring-boot-project:https://github.com/apache/dubbo-spring-boot-project

跟着样例写demo

demo 源码地址: https://github.com/hechangyong/dubbolearn.git

我基本上是跟着 dubbo-spring-boot-starter写的。这边我编写了三个model。model结构如下图:
image

dubbo-commonapi

dubbo-commonapi model 就只编写了两个服务统一用到的API。如图:
image
这边就不多说了。

dubbo-provider-spring-boot

dubbo架构中服务提供者。
项目结构目录如下:
image

  • 添加依赖:
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        
        <dependency>
            <groupId>com.hecy</groupId>
            <artifactId>dubbo-commonapi</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
        <!-- 下面三个不添加会报错 -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
    </dependencies>
  • application.properties 文件中添加dubbo相关的配置
server.port=8888
# Spring boot application
spring.application.name=dubbo-provider-spring-boot
spring.dubbo.server=true
#zookeeper 需要提前启动。【可参考环境搭建那边文章】
spring.dubbo.registry=zookeeper://127.0.0.1:2181


dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

:以上注册中心的配置只针对服务端,消费端不用指定。它自己会根据服务端的地址信息和@Reference(url = "dubbo://127.0.0.1:20880") 注解去解析协议。

  • 接下来开始编写代码。代码如下:
@EnableDubboConfiguration
@SpringBootApplication
public class DubboProviderLauncher {

    public static void main(String[] args) {
        SpringApplication.run(DubboProviderLauncher.class, args);
    }
}

@EnableDubboConfiguration 表示会开启dubbo功能。(dubbo provide服务可以使用或者不使用web容器。 )

@Service(interfaceName ="com.hecy.dubbocommon.SayHello")
@Component
public class SayHelloServiceImpl  implements SayHello {
    @Override
    public String sayHello(String name) {
        return name + ": Say Hello To You";
    }
}

注: 上面的@Serviceimport com.alibaba.dubbo.config.annotation.Service】注解。 其中interfaceClass是要发布的服务的接口名。

消费dubbo的服务

项目结构目录如下:
image

  • 添加依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.spring.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.hecy</groupId>
        <artifactId>dubbo-commonapi</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
  • 在application中添加相关配置
#我这边是用spring boot 启动的。所以会和sever的端口错开
server.port=8881
spring.application.name=dubbo-consumber-spring-boot

  • 添加代码
@EnableDubboConfiguration
@SpringBootApplication
public class DubboConsumberLauncher {

    public static void main(String[] args) {
        SpringApplication.run(DubboConsumberLauncher.class, args);
    }
}

上面关注的点是需要开启@EnableDubboConfiguration

@RestController
@RequestMapping("/a")
public class SayHelloConsumberImpl {
    //这里配置的地址不是 zookeeper 注册地址,而是服务方开启的dubbo服务地址。
    @Reference(url = "dubbo://127.0.0.1:20880")
    private SayHello sayHello;

    @GetMapping("/b")
    public String sayhello(){
         return sayHello.sayHello("小可爱");
    }
}

注: 这边需要主要注意的是dubbo 的@Reference 和 spring 的@Controller有冲突,使用后调用dubbo服务会报404错误。 在对外暴露接口的时候需要使用@RestController这个注解。

下图是运行结果:image

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值