SpringBoot整合Dubbo,分布式服务框架

SpringBoot整合Dubbo,分布式服务框架

 

Dubbo是一个分布式服务框架,之前有用过,最近重新看了下,想到项目刚好是分布式架构,所以实践下SpringBoot整合Dubbo,为项目改造做好准备。

一、环境搭建

首先在本机搭建zookeeper集群(服务注册中心)以及dubbo-admin(服务监控中心)

1、zookeeper window下伪分布式搭建

先下载zookeeper,地址:http://zookeeper.apache.org/releases.html#download,下载zookeeper-3.4.12.tar.gz完成后,解压到本地,复制三份:zookeeper1、zookeeper2、zookeeper3,如下:

SpringBoot整合Dubbo,分布式服务框架_第1张图片

同时新建目录data,在data下新建数据存放目录依次为1、2、3,在1目录下新建myid文件,输入内容:1,如下:

SpringBoot整合Dubbo,分布式服务框架_第2张图片

2目录、3目录同理,建好myid文件后,分别输入内容2、3,接着修改三个bin目录下的配置文件,将zoo_sample.cfg重命名为zoo.cfg,配置具体如下:

dataDir=C:/astudy/soft/zookeeper/data/1

clientPort=2181

server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889
dataDir=C:/astudy/soft/zookeeper/data/2

clientPort=2182

server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889
dataDir=C:/astudy/soft/zookeeper/data/3

clientPort=2183

server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889

最后分别启动三个bin目录下的zkServer.cmd文件,启动成功,可以用zookeeper可视化工具ZooInspector连接,下载地址:

https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

,解压后直接运行zookeeper-dev-ZooInspector.jar,输入zookeeper连接地址:localhost:2181,成功如下:

SpringBoot整合Dubbo,分布式服务框架_第3张图片

2、dubbo-admin搭建

首先打开git命令行工具,clone dubbo-admin源码到本地: 

git clone https://github.com/apache/incubator-dubbo-ops

然后进入该目录下,执行maven打包命令:

mvn clean package -Dmaven.skip.test=true

等项目打包完后,进入dubbo-admin\target目录下,可以发现有jar包dubbo-admin-0.0.1-SNAPSHOT.jar,运行jar:

java -jar .\dubbo-admin-0.0.1-SNAPSHOT.jar

然后打开浏览器访问地址:http://localhost:7001/,登录账号密码:root\root,成功登录如下:

SpringBoot整合Dubbo,分布式服务框架_第4张图片

二、新建项目

环境搭建好了之后,新建三个SpringBoot maven项目:dubbo-provider,dubbo-consumer,dubbo-interface,其中dubbo-provider是服务提供者,dubbo-consumer是服务消费者,dubbo-interface存放接口,dubbo-provider、dubbo-consumer依赖dubbo-interface。

1、dubbo-interface依赖项目

首先在pom文件引入dubbo-spring-boot-starter依赖,具体如下:


    io.dubbo.springboot
    spring-boot-starter-dubbo
    1.0.0

然后编写测试接口ITestService,代码如下:

package com.zehao.dubbo.service;

public interface ITestService {
	
	/**
	 * test add 
	 * @param a
	 * @param b
	 * @return a + b
	 */
	public int testAdd(int a, int b);

}

2、dubbo-provider服务提供者项目

此项目要依赖dubbo-interface接口项目,所以除了引入SpringBoot依赖以及dubbo starter依赖,还需引入dubbo-interface依赖,pom文件依赖配置如下:


    org.springframework.boot
    spring-boot-starter-web



    io.dubbo.springboot
    spring-boot-starter-dubbo
    1.0.0



    com.zehao
    dubbo-interface
    0.0.1-SNAPSHOT

接着是配置application.properties 文件,添加如下配置:

# 端口
server.port=8080
# 服务提供者名称
spring.dubbo.application.name=provider
# 服务注册中心地址,zookeeper集群配置
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181?backup=127.0.0.1:2182,127.0.0.1:2183
# dubbo协议名称
spring.dubbo.protocol.name=dubbo
# dubbo协议使用端口
spring.dubbo.protocol.port=20880
# 要暴露的服务接口实现类的包
spring.dubbo.scan=com.zehao.dubbo.service

然后编写测试接口的实现类TestServiceImpl,这里需要注意实现类的service注解用的是alibaba.dubbo的注解,代码如下:

package com.zehao.dubbo.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.zehao.dubbo.service.ITestService;

@Service
public class TestServiceImpl implements ITestService {

	@Override
	public int testAdd(int a, int b) {
		// TODO Auto-generated method stub
		return a + b;
	}

}

3、dubbo-consumer服务消费者项目

此项目的pom文件依赖配置与dubbo-provider的pom文件依赖配置一样,这里略过,接着配置application.properties 文件,这里要注意spring.dubbo.scan的配置:配置调用dubbo服务的类所在的包(例如Testcontroller调用ITestService,则配置controller所在的包),或者直接配置启动类所在的包,具体配置如下:

# 端口
server.port=8081
# dubbo 消费者名称
spring.dubbo.application.name=consumer
# 服务注册中心地址
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
# dubbo扫描的包
spring.dubbo.scan=com.zehao.dubbo.controller

然后编写TestController,提供接口访问,代码如下:

package com.zehao.dubbo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.dubbo.config.annotation.Reference;
import com.zehao.dubbo.service.ITestService;

@RestController
@RequestMapping(value = "/test")
public class TestController {
	
	@Reference
	private ITestService iTestService;
	
	@RequestMapping("/add")
	public Object test(int a, int b) {
		return iTestService.testAdd(a, b);
	}

}

完成之后,项目结构如下:

SpringBoot整合Dubbo,分布式服务框架_第5张图片

三、运行项目

最后分别运行ProviderApp以及ConsumerApp,在控制台可以看到服务提供者注册服务:

SpringBoot整合Dubbo,分布式服务框架_第6张图片

消费者订阅服务:

启动成功后,刷新dubbo-admin管理页面可以看到服务提供者以及消费者信息,如下:

SpringBoot整合Dubbo,分布式服务框架_第7张图片

访问接口:http://localhost:8081/test/add?a=3&b=2,可以看到成功调用服务,如下:

SpringBoot整合Dubbo,分布式服务框架_第8张图片

 

参考:

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

 

你可能感兴趣的:(springboot,dubbo,zookeeper)