热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot+zookeeper+dubbo小案例

Dubbo是一款高性能、轻量级的开源JavaRPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。ZooKeeper是一个分布式的

Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
现在我们便使用SpringBoot+zookeeper+dubbo的方式编写一个小小的demo。闲话不多说直接给上案例目录结构。
案例目录结构
dubbo-api里面存放的是一些公共的方法,实体类以及接口。如图:
在这里插入图片描述
因为是简单的案例,所以只有一个实体类以及一个接口对应的代码如下:
User

package com.it.ds.model;import lombok.Data;import java.io.Serializable;/*** @ClassName: User* @Description:* @Author: 盗帅* @Date: 2020/1/17 10:22*/
@Data
public class User implements Serializable {private String id;private String userName;private String password;private String amil;private String address;
}

IUserService

package com.it.ds.service;import com.it.ds.model.User;import java.util.List;public interface IUserService {List getAll();
}

接下来便是对应的提供者dubbo-provider对应的模块,提供者里面主要的便是接口的实现类UserServiceImpl,由于是简单的案例,所以就没有进行数据库查询,直接使用虚拟数据,代码如下:

package com.it.ds.service.impl;import com.it.ds.model.User;
import com.it.ds.service.IUserService;
import org.springframework.stereotype.Service;import java.util.Arrays;
import java.util.List;
import java.util.UUID;/*** @ClassName: UserServiceImpl* @Description:* @Author: 盗帅* @Date: 2020/1/17 10:26*/
@Service
@com.alibaba.dubbo.config.annotation.Service //暴露dubbo服务
public class UserServiceImpl implements IUserService {@Overridepublic List getAll() {User user1 = new User();user1.setId(UUID.randomUUID().toString());user1.setUserName("盗帅");user1.setPassword("123456");user1.setAmil("10086@qq.com");user1.setAddress("北京");User user2 = new User();user2.setId(UUID.randomUUID().toString());user2.setUserName("孙悟空");user2.setPassword("123456");user2.setAmil("10087@qq.com");user2.setAddress("上海");return Arrays.asList(user1,user2);}
}

其中最重要的便是@com.alibaba.dubbo.config.annotation.Service 这个注解,这个注解的作用是暴露服务,也就是将这个服务暴露出去提供消费者调用这个服务以达到不同服务器上的相互调用。接着便是需要进行一些配置将服务注册到注册中心了,在案例中使用的是zookeeper注册中心。因为是简单的入门案例,所以这里只需要进行一些基本的配置即可,具体的配置如下

#指定当前服务的名字
dubbo.application.name=dubbo-provider
#指定注册中心的位置 protocol:指定协议
dubbo.registry.protocol=zookeeper
#address:指定地址
dubbo.registry.address=127.0.0.1:2181
#指定通信规则和端口号
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
#连接监控中心
dubbo.monitor.protocol=registry

接下来也是比较关键的一步了,配置什么的都写好了,剩下的就是需要zookeeper,接下来我们就可以去网上下载一个zookeeper,解压后进入目录如下:
在这里插入图片描述
进入其中的bin目录运行zkServer.cmd文件即可
在这里插入图片描述
这个时候已经进行了一半了,为了我们更加直观的观察我们需要安装一个提供者与消费者的控制台页面,这个案例中用的是dubbo-admin,当然也可以自行百度,运行了该控制页面后,就可以将案例中刚刚编写的dubbo-provider模块启动。启动类代码如下:

package com.it.ds;import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableDubbo //开启基于注解的dubbo功能
@SpringBootApplication
public class DubboProviderApplication {public static void main(String[] args) {SpringApplication.run(DubboProviderApplication.class, args);}}

@EnableDubbo该注解需要加上,只有加上它之前那个暴露服务的注解才能生效。启动好之后便可以去控制台页面查看结果了,如图:
在这里插入图片描述
这样一来我们的提供者算是完成了。
接下来便是需要编写消费者了,消费者同理创建一个springboot的模块,由于是案例只写了一个简单控制层,代码如下:

package com.it.ds.controller;import com.alibaba.dubbo.config.annotation.Reference;
import com.it.ds.model.User;
import com.it.ds.service.IUserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.List;/*** @ClassName: UserController* @Description:* @Author: 盗帅* @Date: 2020/1/17 10:51*/
@Controller("user")
public class UserController {@ReferenceIUserService userService;@RequestMapping("getAll")@ResponseBodypublic List getAll(){return userService.getAll();}
}

注意里面有一个@Reference注解,这个注解功能便是从注册中心上调用对应的服务,而不再是@Autowired。接下来便是消费者的配置了。如下:

#服务名称
dubbo.application.name=dubbo-consumer
#指定注册中心的位置 protocol:指定协议
dubbo.registry.protocol=zookeeper
#address:指定地址
dubbo.registry.address=127.0.0.1:2181
#连接监控中心
dubbo.monitor.protocol=registryserver.port=8081

最后我们需要启动消费者,启动了中同样需要加上注解@EnableDubbo,启动类如下:

package com.it.ds;import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableDubbo
@SpringBootApplication
public class DubboConsumerApplication {public static void main(String[] args) {SpringApplication.run(DubboConsumerApplication.class, args);}}

启动消费者后,刷新控制页面,消费者便上来了,如图:
在这里插入图片描述
这个时候基本上就完成了,我们可以访问一下消费者对应的方法,便可以得到对应的数据了。如图:
在这里插入图片描述


推荐阅读
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 微信公众号推送模板40036问题
    返回码错误码描述说明40001invalidcredential不合法的调用凭证40002invalidgrant_type不合法的grant_type40003invalidop ... [详细]
  • Oracle ERP系统用户指南:涵盖MRP模块详细操作说明
    《Oracle ERP系统用户指南》详细介绍了MRP模块的操作流程与功能。该手册涵盖了从基础设置到高级应用的全方位指导,旨在帮助用户高效地管理和优化物料需求计划。文档编号、受控状态及生效日期等信息均在手册中明确标注,确保内容的准确性和时效性。编制人忻滢对内容进行了全面审核与确认,以保障用户的使用体验。 ... [详细]
  • Composer 无法加载本地第三方库?如何解决这一常见问题 ... [详细]
  • feat: Enhances Jest Testing Capabilities with Snapshot Support ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
author-avatar
叔叔123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有