博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Lolttery】项目开发日志 (四)dubbo初战
阅读量:6844 次
发布时间:2019-06-26

本文共 2533 字,大约阅读时间需要 8 分钟。

这几天又学到了新知识:dubbo框架 此框架很好的解决了我之前的Netty微服务框架中遇到的服务注册、管理的问题。于是拿来学学 官网地址:   ##1、服务端的配置: dubbo可以与spring良好的结合,所以服务端的配置就比较简洁:

复制代码

在这里使用了dubbo协议,fastjson做序列化。默认也是使用netty作为服务器。

注册中心用redis,单纯是因为现在有一个redis服务。官方并不推荐使用。以后会考虑换用zookeeper

在具体的实现类中的注解如下:

@Service(version="1.0",interfaceClass = MatchService.class)public class MatchServiceImpl implements MatchService {复制代码

MatchService接口放在common项目下,被生产者和消费者共同依赖。

要注意这个Service注解并不是spring的注解,而是dubbo包下的注解。version也很重要,最开始的时候遇到了双方版本号不一致(1.0.0与1.0)导致找不到服务的情况。

如此想来依赖版本号对于未来的版本管理也是甚好的。

剩下的代码就和正常的服务入口代码一样了。

##2、客户端

客户端的问题在于不一定使用spring框架。

于是仿照官网的api调用,自己写了一个客户端工具,每次需要服务的时候只要如main函数中调用即可。省去了自己满世界找服务地址的麻烦。

/** * dubbo分布式服务客户端 * Created by shizhida on 16/4/1. */public class DubboClient {    public static void main(String[] args) {        MatchService matchService = DubboClient.getInstance().getService(MatchService.class);        System.out.println(matchService.listMatchByTime(1,1));    }    static class inner{        public static DubboClient client = new DubboClient();    }    public static DubboClient getInstance(){        return inner.client;    }    //连接缓存    private Map
configpool = new ConcurrentHashMap<>(); //服务缓存 private Map
servicepool = new ConcurrentHashMap<>(); private ApplicationConfig application; private RegistryConfig registry; public
T getService(Class
clazz){ //直接从服务缓存池中取出 if(servicepool.containsKey(clazz)){ return (T) servicepool.get(clazz); } //若是服务缓存池中没有,检查连接缓存池并生成一个新的服务 else if(configpool.containsKey(clazz)){ ReferenceConfig
referenceConfig = configpool.get(clazz); return referenceConfig.get(); } //若连接缓存池中也没有,则生成一个新的连接并生成新的服务 else { ReferenceConfig
referenceConfig = genReferenceConfig(clazz); T service = referenceConfig.get(); servicepool.put(clazz,service); return service; } } private
ReferenceConfig
genReferenceConfig(Class
clazz) { ReferenceConfig
reference = new ReferenceConfig<>(); // 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏 reference.setApplication(application); reference.setRegistry(registry); // 多个注册中心可以用setRegistries() reference.setInterface(clazz); reference.setVersion("1.0"); configpool.put(clazz,reference); return reference; } private DubboClient(){ application = new ApplicationConfig(); application.setName("common-client"); // 连接注册中心配置 registry = new RegistryConfig(); registry.setAddress("redis://192.168.3.9:6379"); }}复制代码

转载地址:http://ztdul.baihongyu.com/

你可能感兴趣的文章
RocketMQ架构模块解析
查看>>
物联网时代需要开放、好用及可信的平台
查看>>
Android Monkey测试
查看>>
Intel芯将整合雷电技术 未来MBP因此便宜点
查看>>
常见物联网近距离无线通信技术解析
查看>>
《嵌入式 Linux C 语言应用程序设计(修订版)》——2.2 嵌入式Linux编辑器vi的使用...
查看>>
黑客发现 Adobe Flash 播放器第二个零日漏洞
查看>>
Docker —— 用于统一开发和部署的轻量级 Linux 容器 【已翻译100%】
查看>>
《初级会计电算化应用教程(金蝶KIS专业版)》——1.3 电算化会计信息系统
查看>>
Android 开发者应该使用 FlatBuffers 替代 JSON ?
查看>>
《拥抱变化——社交网络时代的企业转型之道》一找准组织目标和企业文化
查看>>
《Arduino奇妙之旅:智能车趣味制作天龙八步》一3.2 构建小发明
查看>>
《Cisco安全防火墙服务模块(FWSM)解决方案》——第2章防火墙服务模块概述
查看>>
Go语言项目(kingshard)性能优化实例剖析
查看>>
安全预警:ImageMagick 图象处理软件存在远程代码执行(CVE-2016-3714)
查看>>
Google 为什么要把最重要的秘密开源?
查看>>
《Hadoop大数据分析与挖掘实战》——1.5节餐饮服务中的大数据应用
查看>>
《ANSYS Workbench 14有限元分析自学手册》——2.5 体操作
查看>>
《交互式程序设计 第2版》一第1章 交互设计导论
查看>>
ARM拟将ARM核心置入未来的Fusion APU中
查看>>