Dubbo扩展点SPI简单实例
时间:2020-07-12
本文章向大家介绍Dubbo扩展点SPI简单实例,主要包括Dubbo扩展点SPI简单实例使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
dubbo采用微内核+插件机制方便框架使用者自行扩展,这个插件机制的实现就是JDK的SPI。dubbo扩展了JDK的SPI,按官方说法,叫扩展点SPI。接下来看一个例子,使用扩展点SPI来自定义一个LoadBalance。原代码参见一个spring boot集成dubbo的小例子,只需修改消费者,服务提供者不用动。下面重点把修改点列出来:
1、消费者项目新增配置文件:resources/META-INF/dubbo/org.apache.dubbo.rpc.cluster.LoadBalance
demo=com.example.dubbo.democonsumer.loadbalance.DemoLoadBalance
2、消费者项目新增自定义LoadBalance实现:
package com.example.dubbo.democonsumer.loadbalance; import org.apache.dubbo.common.URL; import org.apache.dubbo.rpc.Invocation; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.RpcException; import org.apache.dubbo.rpc.cluster.LoadBalance; import java.util.List; public class DemoLoadBalance implements LoadBalance { @Override public <T> Invoker<T> select(List<Invoker<T>> list, URL url, Invocation invocation) throws RpcException { System.out.printf("DemoLoadBalance coming, url %s", url.toFullString()); return list.get(0); } }
3、消费者项目的Controller类新增LoadBalance注解:
package com.example.dubbo.democonsumer.controller; import com.example.dubbo.demo.domain.DemoBean; import com.example.dubbo.demo.service.DemoService; import org.apache.dubbo.config.annotation.Reference; import org.springframework.web.bind.annotation.*; /** * 服务消费者 */ @RestController public class ConsumerController { // 引入API @Reference(check = false, loadbalance = "demo") DemoService demoService; @ResponseBody @RequestMapping("/hello") public String sayHelo(@RequestParam(value = "msg") String msg) { return demoService.sayHelo(msg); } @ResponseBody @RequestMapping(value = "/login", method = RequestMethod.POST) public String login(DemoBean demoBean) { return demoService.login(demoBean); } }
完事了。启动消费者和两个服务提供者(IDEA启动多实例参见IDEA同一项目启动多个实例),注意两个provider配置的rpc端口不能相同:
浏览器输入消费者hello接口跑一次:
从消费者日志可以看到进入我们自定义的LoadBalance:
原文地址:https://www.cnblogs.com/wuxun1997/p/13286911.html
- 测试网站页面网速的一个简单Python脚本
- 框架页面尽可以这么用(后置代码中控制框架)
- 微信小程序「学科排名」发布了
- Nginx 负载均衡的Cache缓存批量清理的操作记录
- DotNet软件开发框架
- Nginx通过https方式反向代理的简单实现
- 再论IBatisNet + Castle进行项目的开发
- 利用xml轻松读取web.config中的用户自定义节
- 分布式监控系统Zabbix-3.0.3-完整安装记录(3)-监控nginx,php,memcache,Low-level discovery磁盘IO
- python报错问题解决:'ascii' codec can't encode character
- 利用message queue实现aspx与winform通信, 并附完整示例
- 10招步骤保护IIS服务器安全
- Haproxy+Keepalived高可用环境部署梳理(主主和主从模式)
- Android-Universal-Image-Loader 图片异步加载类库的使用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- java之Object类
- springboot开发之引入资源并实现跳转到登录界面
- java之==操作符和equals操作符
- LeetCode | 24.两两交换链表中的节点
- java之单例设计模式
- Nginx | Nginx的介绍和安装
- 真特么激动第一个爬虫----爬取豆瓣电影top250
- LeetCode | 141.环形链表
- LeetCode | 20.有效的括号
- springboot开发之实现登录功能
- springboot开发之国际化(中英文切换)
- LeetCode | 225.用队列实现栈
- springboot开发之显示员工信息
- LeetCode | 232.用栈实现队列
- springboot开发之thymeleaf页面公共元素的抽取