SpringBoot+ZooKeeper+Dubbo微服务框架

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 [toc]

1. 下载ZooKeeper并安装

ZooKeeper3.5.5
将下载文件解压

打开conf目录进行配置

新建zoo.cfg文件添加如下配置内容

启动ZooKeeper
打开bin目录,在windows下启动点击
zkServer.cmd
若在Linux下启动点击zkServer.sh

启动成功为

2181为服务器端口

2. 简单的构建使用

1.新建一个SpringBoot工程作为服务端业务层
2.pom文件<dependencies>中添加

<!-- 远程注册调用 -->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>

第一个为Dubbo,第二个为ZooKeeper的Maven依赖

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

3.配置application.properties文件

spring.dubbo.application.name=server
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
server.port=7070
spring.dubbo.server=true
spring.dubbo.scan=com.service

spring.dubbo.application.name=server 为Dubbo配置的名称
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181 为注册中心地址
spring.dubbo.protocol.name=dubbo 为服务协议
spring.dubbo.protocol.port=20880 服务端口
server.port=7070 设置SpringBoot自带Tomcat的端口号

其他Dubbo的配置如下可按需添加,暂时可以忽略跳过


//Dubbo 配置
//扫描包路径
<br>spring.dubbo.scan=org.<br>spring.<br>springboot.dubbo

//Dubbo 应用配置
// 应用名称
<br>spring.dubbo.application.name=xxx

// 模块版本
<br>spring.dubbo.application.version=xxx

// 应用负责人
<br>spring.dubbo.application.owner=xxx

// 组织名(BU或部门)
<br>spring.dubbo.application.organization=xxx

// 分层
<br>spring.dubbo.application.architecture=xxx

// 环境,如:dev/test/run
<br>spring.dubbo.application.environment=xxx

// Java代码编译器
<br>spring.dubbo.application.compiler=xxx

// 日志输出方式
<br>spring.dubbo.application.logger=xxx

// 注册中心 0
<br>spring.dubbo.application.registries[0].address=zookeeper://127.0.0.1:2181=xxx
// 注册中心 1
<br>spring.dubbo.application.registries[1].address=zookeeper://127.0.0.1:2181=xxx

// 服务监控
<br>spring.dubbo.application.monitor.address=xxx

Dubbo 注册中心配置类
// 注册中心地址
<br>spring.dubbo.application.registries.address=xxx

// 注册中心登录用户名
<br>spring.dubbo.application.registries.username=xxx

// 注册中心登录密码
<br>spring.dubbo.application.registries.password=xxx

// 注册中心缺省端口
<br>spring.dubbo.application.registries.port=xxx

// 注册中心协议
<br>spring.dubbo.application.registries.protocol=xxx

// ================客户端实现==========================
<br>spring.dubbo.application.registries.transporter=xxx

<br>spring.dubbo.application.registries.server=xxx

<br>spring.dubbo.application.registries.client=xxx

<br>spring.dubbo.application.registries.cluster=xxx

<br>spring.dubbo.application.registries.group=xxx

<br>spring.dubbo.application.registries.version=xxx

// 注册中心请求超时时间(毫秒)
<br>spring.dubbo.application.registries.timeout=xxx

// 注册中心会话超时时间(毫秒)
<br>spring.dubbo.application.registries.session=xxx

// 动态注册中心列表存储文件
<br>spring.dubbo.application.registries.file=xxx

// 停止时等候完成通知时间
<br>spring.dubbo.application.registries.wait=xxx

// 启动时检查注册中心是否存在
<br>spring.dubbo.application.registries.check=xxx

// 在该注册中心上注册是动态的还是静态的服务
<br>spring.dubbo.application.registries.dynamic=xxx

// 在该注册中心上服务是否暴露
<br>spring.dubbo.application.registries.register=xxx

// 在该注册中心上服务是否引用
<br>spring.dubbo.application.registries.subscribe=xxx

//Dubbo 服务协议配置

// 服务协议
<br>spring.dubbo.application.protocol.name=xxx

// 服务IP地址(多网卡时使用)
<br>spring.dubbo.application.protocol.host=xxx

// 服务端口
<br>spring.dubbo.application.protocol.port=xxx

// 上下文路径
<br>spring.dubbo.application.protocol.contextpath=xxx

// 线程池类型
<br>spring.dubbo.application.protocol.threadpool=xxx

// 线程池大小(固定大小)
<br>spring.dubbo.application.protocol.threads=xxx

// IO线程池大小(固定大小)
<br>spring.dubbo.application.protocol.iothreads=xxx

// 线程池队列大小
<br>spring.dubbo.application.protocol.queues=xxx

// 最大接收连接数
<br>spring.dubbo.application.protocol.accepts=xxx

// 协议编码
<br>spring.dubbo.application.protocol.codec=xxx

// 序列化方式
<br>spring.dubbo.application.protocol.serialization=xxx

// 字符集
<br>spring.dubbo.application.protocol.charset=xxx

// 最大请求数据长度
<br>spring.dubbo.application.protocol.payload=xxx

// 缓存区大小
<br>spring.dubbo.application.protocol.buffer=xxx

// 心跳间隔
<br>spring.dubbo.application.protocol.heartbeat=xxx

// 访问日志
<br>spring.dubbo.application.protocol.accesslog=xxx

// 网络传输方式
<br>spring.dubbo.application.protocol.transporter=xxx

// 信息交换方式
<br>spring.dubbo.application.protocol.exchanger=xxx

// 信息线程模型派发方式
<br>spring.dubbo.application.protocol.dispatcher=xxx

// 对称网络组网方式
<br>spring.dubbo.application.protocol.networker=xxx

// 服务器端实现
<br>spring.dubbo.application.protocol.server=xxx

// 客户端实现
<br>spring.dubbo.application.protocol.client=xxx

// 支持的telnet命令,多个命令用逗号分隔
<br>spring.dubbo.application.protocol.telnet=xxx

// 命令行提示符
<br>spring.dubbo.application.protocol.prompt=xxx

// status检查
<br>spring.dubbo.application.protocol.status=xxx

// 是否注册
<br>spring.dubbo.application.protocol.status=xxx

4.创建Service层

创建类DubboService.java

package com.service;

import org.springframework.stereotype.Service;

@Service
@com.alibaba.dubbo.config.annotation.Service    //加入这个后才能调用远程注册方法
public class DubboService{
    public int add(int x,int y){
        return x+y;
    }

}

总共有两个Service功能各不相同,第一个用来同一工程下调用
第二个为远程调用

生成一个对应的接口


点击Refactor重构

package com.service;

import org.springframework.stereotype.Service;

@Service
@com.alibaba.dubbo.config.annotation.Service    //加入这个后才能调用远程注册方法
public class DubboService implements IDubboService {    //远程调用必须实现接口

    @Override
    public int add(int x, int y){
        return x+y;
    }

}

同时在Service包内多出一个刚刚创建的IDubboService接口

5.配置启动类

@ComponentScan(“com.service”) 表示扫描
@EnableDubboConfiguration 表示启动dubbo配置

package com.springboot.springboot02;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan("com.service")
@EnableDubboConfiguration
public class Springboot02Application {

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

}

6.新建另一个SpringBoot模块

远程调用业务层内的方法
重复之前的2步骤pom文件<dependencies>中添加远程调用的Maven依赖
配置application.properties文件

spring.dubbo.application.name=client
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
server.port=9090

需要注意Tomcat的端口号与Dubbo名必须不同

复制之前生成的接口IDubboService到当前模块并新建Action层

在DubboAction中远程调用add方法

package com.action;

import com.alibaba.dubbo.config.annotation.Reference;
import com.service.IDubboService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DubboAction {
    @Reference  //到注册中心中找实现类
    private IDubboService dubboService;
    @RequestMapping("/add")
    public String add(int x,int y){
        int z = dubboService.add(x,y);
        return z+"";
    }
}

@RestController是ResponseBody与Controller的结合
@Reference是到注册中心中找实现类DubboService
注意的是@Reference必须是com.alibaba.dubbo.config.annotation这个包下的Reference

为当前模块的启动类添加注解

package com.springboot.springboot03;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan({"com.action","com.service"})	//添加扫描
@EnableDubboConfiguration
public class Springboot03Application {

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

}

7.启动实现类进行测试

在启动Zookeeper的前提下,先启动Server模块的,再启动第二个模块client的

在浏览器中输入如下参数进行测试是否成功调用执行此方法

若出现错误报空指针异常请参考这篇文章中下面的解决方法
dubbo 使用zookeeper 出现 Dubbo客户端调用报错NullPointerException

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个开源的Java框架,用于快速构建独立的、基于Spring的应用程序。它简化了Spring应用程序的配置和部署过程,并提供了许多嵌入式服务器,如Tomcat、Jetty等。Spring Boot还提供了自动配置的特性,可以根据类路径中的依赖自动配置Spring应用程序。 Dubbo是一款高性能的分布式服务框架,也是阿里巴巴开源的项目。它提供了服务治理、远程通讯和分布式调用等功能,帮助开发人员轻松构建分布式服务化的应用。 Zookeeper是一个开源的分布式协调服务,可以用于实现分布式应用程序的一致性和可靠性。它提供了一个类似于文件系统的层次化的命名空间,并允许开发人员注册、协调和共享各种资源,如配置信息、服务注册和发现等。 当使用Spring Boot结合DubboZookeeper时,可以构建一个高性能、可扩展和可靠的微服务架构。Spring Boot提供了便利的开发和部署方式,Dubbo提供了分布式服务框架的支持,而Zookeeper则提供了分布式协调服务。开发人员可以使用Spring Boot快速构建独立的微服务应用程序,使用Dubbo进行服务间的通信和管理,同时通过Zookeeper进行服务的注册和发现。这样的架构可以方便地实现微服务架构中的资源共享和服务治理等功能,大大简化了开发人员的负担。 综上所述,Spring Boot结合DubboZookeeper可以构建高效、可靠的微服务架构,并提供了便利的开发和部署方式,帮助开发人员构建高性能的分布式应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值