欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springboot 结合zookeeper,dubbo,支持dubbo,rest协议

程序员文章站 2022-05-05 13:17:36
...
  • 写在前面:

本篇文章主要介绍了springboot怎么样结合dubbo服务,网上类似的文章也很多,但是不自己实战一下,很多坑还是不知道怎么解决。写这篇文章一是记录下期间遇到的坑,还有就是也记录下开发过程,供各位网友参考,写得不好之处,还请各位看官见谅。文章最后会给出源码地址,这里只介绍下核心代码和大概步骤。

  • zookeeper安装

zookeeper在其中的作用是提供服务注册,具体安装步骤如下:

1.获取文件

cd /usr/local/
wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
tar -zxvf zookeeper-3.4.10.tar.gz
cd zookeeper-3.4.10
cp zoo_sample.cfg zoo.cfg

2.编辑配置文件

vim zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/usr/local/zookeeper-3.4.10/data
dataLogDir/usr/local/zookeeper-3.4.10/logs
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
server.1=192.168.20.121:2888:3888
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

3.导入环境变量

vim /etc/profile
# zookeeper env export   
ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.10  
export PATH=$ZOOKEEPER_HOME/bin:$PATH 
source  /etc/profile

4.启动zk以及查看状态

cd /usr/local/zookeeper-3.4.10/bin/

启动zk
./zkServer.sh start

#查看状态  
./zkServer.sh status
  • dubbo-admin的安装

dubbo-admin主要是用来管理dubbo服务的注册下线和查看dubbo服务的provider和consumer信息,这里有两种方法,需要看源码的,直接去dubbo官网下载,然后打成war包放到tomcat的webapps目录下就可以了。网盘分享里给出了war包,如果你还觉得不方便,那就直接下载网盘中的tomcat,直接启动就可以访问了。直接下载tomcat的访问地址,用户名密码如下:

http://ip:8088/dubbo-admin-2.6.0/    用户名:root  密码:root

链接:https://pan.baidu.com/s/1N25BPxBbUGiCxQEH5zph3A 提取码:b3p6 

访问后,看到如下画面,即部署成功

springboot 结合zookeeper,dubbo,支持dubbo,rest协议

  • 服务搭建

这里用的是alibaba提供的dubbo依赖,之前用的是apache的dubbo依赖,但是不知道为什么在调用rest服务时,就是发现不了,改成alibaba的就行了,这个原因还没搞清楚,可能后续会更新说明下原因和处理方法,下面给出依赖:

<dependency>
	<groupId>com.alibaba.boot</groupId>
	<artifactId>dubbo-spring-boot-starter</artifactId>
	<version>0.2.0</version>
</dependency>

dubbo服务分为两部分,一部分是provider,服务提供者,也叫生产者,另一部分是consumer,也叫消费者。基本原理就是provider通过发布服务供consumer远程调用消费。对于consumer调用端,只要导入provider端接口就可以了。下面介绍provider端基本代码编写:

1.接口编写

@Path是为了下面支持rest请求,如果只是dubbo协议可以不用,可以理解为@RequestMapping这个注解差不多

@GET就是限制了访问的方法给http->get请求

@Produces是指返回给消费者的时候,是以json格式返回。有的人可能会说,看接口的返回值是UserDto。的确是这样,接口返回的时候,会自动把UserDto转化为json格式返回

@Path("/say")
public interface IRestFileService {
	@Path("/hello/{id:\\d+}")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public UserDto sayHello(@PathParam("id") String id);
}

2.UserDto编写

package com.weLink.ds.dto;

/**
 * @author ex_wanghaiyang
 *
 * @since 2019年5月14日 上午10:47:38
 */
public class UserDto {
    private String id;
    private String name;

    public UserDto() {
    }

    public UserDto(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

3.实现类编写

这里要格外注意,@Service导入的包不是springframe的包,而是com.alibaba.dubbo.config.annotation.Service这个包

protocol = {"rest", "dubbo"}代表这个服务支持dubbo,rest两种协议的请求

@Service(protocol = {"rest", "dubbo"})
public class RestFileServiceImpl implements IRestFileService {

    @Override
    public UserDto sayHello(String id) {
        return new UserDto(id, id + " hello dubbo rest");
    }
}

4.配置文件

dubbo.application.id=dubbo-provider-demo 
dubbo.application.name=dubbo-provider-demo
dubbo.scan.basePackages=com.weLink.ds.provider.service //接口实现package名
dubbo.registry.address=zookeeper://192.168.20.121:2181  //zk地址
dubbo.registry.id=registry

到这里,基本上provider就告一段落了。

下面介绍consumer的写法

1.consumer编写

/**
 * @author ex_wanghaiyang
 *
 * @since 2019年5月7日 下午1:43:12
 */
@RestController
public class FileConsumerController {

    @Reference
    private IRestFileService iRestFileService;

    @RequestMapping(value = "/hello")
    public UserDto hello(HttpServletRequest request, HttpServletResponse respone) {
        return iRestFileService.sayHello(request.getParameter("id"));
    }

}

2.配置文件

server.port=8090

spring.application.name=provider02
dubbo.registry.address=zookeeper://192.168.20.121:2181

spring.main.allow-bean-definition-overriding=true

访问地址:http://127.0.0.1:8090/hello?id=123 

或者通过rest调用http://127.0.0.1:8091/say/hello?id=123(注意,这里8091端口是配置provider配置dubbo时配置的rest协议的端口,具体怎么配置的,可以看我下面给出源码中配置文件和DubboConfig.java中的写法)

基本上dubbo服务基本核心内容就是这样的,下面给出源码地址:

github地址:

provider:https://github.com/joker-hywang/dubbo-provider-api.git

interface:https://github.com/joker-hywang/dubbo-interface-api.git

consumer:https://github.com/joker-hywang/dubbo-consumer-api.git

记住要三个项目一起下载导入到编码工具中才可以。interface下载后要 执行下

mvn clean install -Dmaven.test.skip=true 把依赖打进本地仓库中,有什么问题,可以评论私我,看看能不能帮你们解决,多谢各位观看。

 

相关标签: springboot dubbo