资讯专栏INFORMATION COLUMN

SpringBoot+Dubbo实战demo

simon_chen / 3343人阅读

摘要:文件引入相关依赖需要引入接口的相关依赖包。服务提供者,包含真正的服务实现代码服务提供者启动类编写注意不要忘记加上注解开启的自动配置。

前言

搭建一个SpringBoot+Dubbo+zookeeper的demo

完整代码见:github.com/Caizhenhao/…

1. 安装zookeeper环境

搭建 zookeeper 之前要确保当前的服务器已经有 JDK 环境。

我使用的是阿里云服务器

注意:如果你也使用的是云服务器必须配置一个安全组,开放你的zookeeper端口。


1.1 首先下载zookeeper的安装包

自行去网上下载zookeeper的安装包后在服务器上解压

1.2 解压

tar -zxvf zookeeper-3.4.11.tar.gz

解压完毕之后修改一下解压之后所得的文件夹名

mv zookeeper-3.4.11 zookeeper

删除 zookeeper 安装包

rm -rf zookeeper-3.4.11.tar.gz
1.3 进入zookeeper目录,创建data文件夹。

mkdir data

进入 data 文件夹 然后执行pwd命令,复制所得的当前目录位置


1.4 进入/zookeeper/conf目录下,复制zoo_sample.cfg,命名为zoo.cfg

cp zoo_sample.cfg zoo.cfg

1.5 修改配置文件

使用 vim zoo.cfg 命令修改配置文件

修改配置文件中的 dataDir 属性:

dataDir=/usr/local/zookeeper/data


1.6 启动测试

进入 /zookeeper/bin 目录然后执行下面的命令启动zookeeper

./zkServer.sh start

查看当前 zookeeper 状态

./zkServer.sh status


或者运行 netstat -lntup 命令查看网络状态,可以看到 zookeeper 的端口号 2181 已经被占用


到这里zookeeper的环境就搭建完成了,开始搭建项目

2. 开始搭建项目

项目我这里采用maven搭建,使用springboot+dubbo+zookeeper

项目分成三个模块


三个模块的功能:

dubbo-api 服务提供者的接口

dubbo-provider 服务提供者

dubbo-consumer 服务消费者

关键依赖

<dependency>
    <groupId>com.alibaba.spring.bootgroupId>
    <artifactId>dubbo-spring-boot-starterartifactId>
    <version>2.0.0version>
dependency>
3. dubbo-api

抽象服务提供者的接口供服务消费者调用

package com.czh.provider.dubboprovider.serviceImpl.service;

public interface HelloService {
    String sayHello(String name);
}

4. dubbo-provider

主要分为下面几步:

    创建 springboot 项目;

    加入接口的相关依赖 jar 包;

    在 application.properties 配置文件中配置 dubbo 相关信息;

    实现接口类;

    服务提供者启动类编写

项目结构:


4.1 dubbo-provider 项目创建

创建一个 SpringBoot 项目,注意勾选上 web 模块。

4.2 pom 文件引入相关依赖

需要引入接口的相关依赖 jar 包。注意将本项目和 dubbo-api 项目的 dependency 依赖的 groupId 和 artifactId 改成自己的。


    
        com.czh.api
        dubbo-api
        0.0.1-SNAPSHOT
    

4.3 在 application.properties 配置文件中配置 dubbo 相关信息

配置很简单,这主要得益于 dubbo 的@EnableDubbo注解。详情可以参考dubbo官方说明dubbo.apache.org/zh-cn/blog/…

# 配置端口
spring.application.name = dubbo-provider
server.port = 9090

#指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名)
dubbo.application.name = dubbo-provider

demo.service.version = 1.0.0

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

#指定注册中心的位置
dubbo.registry.address = zookeeper://ip:2181

#统一设置服务提供方的规则
dubbo.provider.timeout = 1000
4.4 实现接口

注意: @Service 注解使用的时 Dubbo 提供的而不是 Spring 提供的。

服务提供者,包含真正的服务实现代码

package com.czh.provider.dubboprovider.serviceImpl;

import com.alibaba.dubbo.config.annotation.Service;
import com.czh.provider.dubboprovider.serviceImpl.service.HelloService;

@Service(version = "${demo.service.version}")
public class HelloServiceImpl implements HelloService {

    @Override
    public String sayHello(String name) {
        return "Hello " + name + ",This is springboot-dubbo test";
    }
}
4.5 服务提供者启动类编写

注意:不要忘记加上 @EnableDubbo 注解开启Dubbo 的自动配置。

package com.czh.provider;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo
public class DubboProviderApplication {

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

}

5. dubbo-consumer

主要分为下面几步:

    创建 springboot 项目;

    加入接口的相关依赖 jar 包;

    在 application.properties 配置文件中配置 dubbo 相关信息;

    服务消费者调用接口编写

    服务消费者启动类编写

项目结构:


前两步与之前的服务提供者一样,这里我直接从第三步开始说起

5.3 在 application.properties 配置文件中配置 dubbo 相关信息

与服务提供者基本一致

spring.application.name = dubbo-consumer
server.port = 9091

#指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名)
dubbo.application.name = dubbo-consumer

demo.service.version = 1.0.0

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

#指定注册中心的位置
dubbo.registry.address = zookeeper://ip:2181

#统一设置服务提供方的规则
dubbo.consumer.timeout = 5000
5.4 编写一个简单的Controller调用远程服务

package com.czh.consumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.czh.api.service.HelloService;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloConsumerController {
    @Reference(version = "${demo.service.version}")
    private HelloService helloService;

    @RequestMapping("/sayHello/{name}")
    public String sayHello(@PathVariable("name") String name) {
        return helloService.sayHello(name);
    }

}

5.5 服务消费者启动类编写

package com.czh.consumer;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo
public class DubboConsumerApplication {

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

}

6. 测试结果

可以看到消费者调用服务提供者正常


查看zookeeper下发现有我们注册的服务节点


7. 小结

使用springboot+dubbo+zookeeper进行搭建 dubbo 的项目应该说是比较简单的,官方也有集成Springboot的依赖,这里就不多说了,实践出真知~

完整代码见:github.com/Caizhenhao/…


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/6878.html

相关文章

  • 超详细,新手都能看懂 !使用SpringBoot+Dubbo 搭建一个简单的分布式服务

    Github 地址:https://github.com/Snailclimb/springboot-integration-examples ,欢迎各位 Star。 目录: 使用 SpringBoot+Dubbo 搭建一个简单分布式服务 实战之前,先来看几个重要的概念 什么是分布式? 什么是 Duboo? Dubbo 架构 什么是 RPC? 为什么要用 Dubbo? 开始实战 1 ...

    chengtao1633 评论0 收藏0
  • 搭建简单的dubbo案例,并实现对数据库的增删改查

    摘要:创建父工程文件如下这里只添加几个最简单的依赖启动父依赖依赖依赖依赖创建子工程 1.创建父工程 showImg(https://segmentfault.com/img/bVbgtl4?w=387&h=255); pom文件如下(这里只添加几个最简单的依赖) 4.0.0 wyb springbootDubbo pom 1.0-SNAPSHOT...

    MageekChiu 评论0 收藏0
  • Spring Boot 2.x (十五):Dubbo + Zookeeper + 新版Dubbo A

    摘要:简介是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的实现服务的输出和输入功能,可以和框架无缝集成。它提供了三大核心能力面向接口的远程方法调用智能容错和负载均衡服务自动注册和发现。首先我们需要前往官网下载安装包。 Dubbo 简介 Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集...

    DobbyKim 评论0 收藏0
  • 聊聊Dubbo - Dubbo可扩展机制实战

    摘要:今天我想聊聊的另一个很棒的特性就是它的可扩展性。的扩展机制在的官网上,描述自己是一个高性能的框架。接下来的章节中我们会慢慢揭开扩展机制的神秘面纱。扩展扩展点的实现类。的定义在配置文件中可以看到文件中定义了个的扩展实现。 摘要: 在Dubbo的官网上,Dubbo描述自己是一个高性能的RPC框架。今天我想聊聊Dubbo的另一个很棒的特性, 就是它的可扩展性。 Dubbo的扩展机制 在Dub...

    techstay 评论0 收藏0

发表评论

0条评论

simon_chen

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<