springboot+dubbo初尝试
发布日期:2021-05-27 02:54:20 浏览次数:31 分类:技术文章

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

Java应用研发,其形式随着需求一种在变,其架构演变可简单理解为:

1. 单一应用架构

2. 应用和数据库单独部署
3. 应用和数据库集群部署
4. 数据库压力变大,读写分离
5. 缓存中间件加快速度
6. 数据库分库分表
7. 应用按不同类型拆分

Netty 是一个基于NIO的客户端、服务端的编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户端、服务端应用。

RPC(Remote Procedure Call)远程过程调用,是一个计算机通信协议,简单的理解是一个节点请求另一个节点提供的服务。RPC 是一种技术思想而非一种规范或协议。很多RPC框架都是基于netty来实现。

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。简单理解为Dubbo基于netty网络通信框架,采用RPC模式。

Spring Cloud 是微服务框架,直接使用HTTP协议,支持跨语言实现。

HTTP是在应用层中完成,整个通信的代价较高;RPC是直接基于TCP进行远程调用,数据传输在传输层TCP层完成,更适合对效率要求比较高的场景;RPC主要依赖于客户端和服务端之间建立Socket链接进行,底层实现比REST更复杂。

RPC 主要用于公司内部的服务调用,性能消耗低,传输效率高,实现复杂。典型实现Dubbo。

HTTP 主要用于对外的异构环境,浏览器接口调用,App 接口调用,第三方接口调用等。典型实现SpringCloud。

springboot+dubbo实现示例,共包含3个工程,interface、provider、consumer

interface工程为普通的springboot单体应用,只包含interface接口,代码如下:

public interface TestService {    public void ins();    public void del();    public void upd();    public void sel();}

provider工程部分代码如下:

依赖

org.apache.curator
curator-framework
4.0.1
org.apache.curator
curator-recipes
2.8.0
org.apache.dubbo
dubbo-spring-boot-starter
2.7.8
com.ldc
springboot_dubbo_interface
0.0.1-SNAPSHOT

properties配置

server.port=8087#spring项目名spring.application.name=dubbo_provider#Dubbo provider configurationdubbo.application.name=dubbo_providerdubbo.registry.protocol=zookeeperdubbo.registry.address=zookeeper://192.168.1.2:2181dubbo.protocol.name=dubbodubbo.protocol.port=20880#扫描注解包通过该设置将服务注册到zookeeperdubbo.scan.base-packages=com.*.service

代码

@DubboService(version = "1.0.0",interfaceClass = TestService.class)public class TestServiceImpl implements TestService {    @Override    public void ins() {        System.out.println("insert");    }    @Override    public void del() {        System.out.println("delete");    }    @Override    public void upd() {        System.out.println("update");    }    @Override    public void sel() {        System.out.println("select");    }}

consumer工程部分代码如下:

依赖

org.apache.curator
curator-framework
4.0.1
org.apache.curator
curator-recipes
2.8.0
org.apache.dubbo
dubbo-spring-boot-starter
2.7.8
com.ldc
springboot_dubbo_interface
0.0.1-SNAPSHOT

properties配置

server.port=8088#spring项目名spring.application.name=dubbo_consumer#dubbo configurationdubbo.application.name=dubbo_consumerdubbo.registry.protocol=zookeeperdubbo.registry.address=zookeeper://192.168.1.2:2181

代码

@RestControllerpublic class TestController {    @DubboReference(version = "1.0.0")    private TestService testServiceImpl;    @RequestMapping("/ins")    public String ins(){        testServiceImpl.ins();        return "ins";    }    @RequestMapping("/del")    public String del(){        testServiceImpl.del();        return "del";    }    @RequestMapping("/upd")    public String upd(){        testServiceImpl.upd();        return "upd";    }    @RequestMapping("/sel")    public String sel(){        testServiceImpl.sel();        return "sel";    }}

测试结果正常返回。

springboot+dubbo示例,共包含3个工程,分别是springboo_dubbo_api开放的interface、springboot_dubbo_sms短信服务提供者、springboot_dubbo_order订单服务消费者。

springboo_dubbo_api部分核心代码:

public interface OrderService {    void create(String orderContent);}
public interface SmsService {    Object send(String phone,String content);}

springboot_dubbo_sms部分核心代码:

依赖

   
com.ldc
   
springboot_dubbo_api
   
0.0.1-SNAPSHOT
   
redis.clients
   
jedis
   
2.9.0
   
org.springframework.boot
   
spring-boot-starter-data-redis
   
org.apache.curator
   
curator-framework
   
4.0.1
   
org.apache.curator
   
curator-recipes
   
2.8.0
   
org.apache.dubbo
   
dubbo-spring-boot-starter
   
2.7.8

properties

spring.application.name=smsserver.port=9001dubbo.application.name=smsdubbo.registry.address=redis://127.0.0.1:6379dubbo.consumer.timeout=1000dubbo.application.qos-enable=falsedubbo.protocol.name=dubbodubbo.protocol.port=20883dubbo.scan.base-packages=com.*.sms
@DubboServicepublic class SmsServiceImpl implements SmsService {    public Object send(String phone,String content) {        System.out.println("发送短信:" + phone + ":" + content);        return "短信发送成功";    }}

springboot_dubbo_order部分核心代码:

依赖

   
com.ldc
   
springboot_dubbo_api
   
0.0.1-SNAPSHOT
   
redis.clients
   
jedis
   
2.9.0
   
org.springframework.boot
   
spring-boot-starter-data-redis
   
org.apache.curator
   
curator-framework
   
4.0.1
   
org.apache.curator
   
curator-recipes
   
2.8.0
   
org.apache.dubbo
   
dubbo-spring-boot-starter
   
2.7.8

properties

spring.application.name=orderserver.port=9002dubbo.application.name=orderdubbo.registry.address=redis://127.0.0.1:6379dubbo.consumer.timeout=1000dubbo.application.qos-enable=falsedubbo.scan.base-packages=com.*.order
@DubboServicepublic class OrderServiceImpl implements OrderService {    @DubboReference    private SmsService smsService;    public void create(String orderContent) {        System.out.println("订单创建成功:" + orderContent);        Object smsResult = smsService.send("10086","你的短信来了");        System.out.println("smsService调用结果:" + smsResult);    }}
@RestControllerpublic class OrderController {    @Autowired    private OrderService orderService;    @RequestMapping("/create")    public Object create() {        orderService.create("买了一部手机");        return "买了一部手机";    }}

访问地址 ,正确返回 买了一部手机 

sms服务控制台打印,发送短信:10086:你的短信来了

order服务控制台打印,

订单创建成功:买了一部手机

smsService调用结果:短信发送成功

经验证,rpc服务调用ok。

转载地址:https://blog.csdn.net/leijie0322/article/details/113780463 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java常用设计模式之策略模式
下一篇:springboot+netty初体验

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年11月29日 08时35分54秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

php 截取html标签,字符串截取,支持中文和其他编码(可去除HTML标签之后再截取)... 2019-06-17
java我的世界溺尸为啥这么少,我的世界:溺尸刷新几率存在问题?溺尸刷怪塔为何得不到三叉戟?... 2019-06-17
python单词怎么读PHP,python怎么输出单词的字母 2019-06-17
php接收dup,ping产生的DUP!解决方法 2019-06-17
brushtype php,Types - [ php中文手册 ] - 在线原生手册 - php中文网 2019-06-17
只网签没备案 房管局能查到吗_买房人注意了!网签和备案根本不是同一回事,这两者很关键!... 2019-06-17
学校校车运营各项安全管理制度_校车安全管理部际联席会议办公室2020年第1号预警... 2019-06-17
使用idea创建android项目输出hello_SpringBoot入门系列(一)如何快速创建SpringBoot项目... 2019-06-17
apache http上传过慢_不安全的HTTP方法渗透测试 2019-06-17
一建机电实务教材电子版_[机电实务2020]黑色金属材料的类型及应用(教材17页)... 2019-06-17
微信小程序轮播图中间变大_页面设计|学习这4个好看的小程序模板案例 2019-06-17
保存光谱曲线出现问题_高光谱成像技术用于金属锈化分级 2019-06-17
语言木头折断放置问题_大型破碎锤的异响问题 2019-06-17
计算宽度_桥梁伸缩缝宽度计算详解,很有用! 2019-06-17
输入参数_逆变器输入电压参数,究竟藏着什么秘密? 2019-06-17
过滤网页元素_如何选择网页更新提醒工具 2019-06-17
怎么做扭曲效果_网站怎么做推广效果才好? 2019-06-17
老山参炖什么好_老山檀线香多少钱合适,老山檀香哪家的比较好 2019-06-17
math的向上取整_JavaScript数字向上取整:Math对象的ceil()方法 2019-06-17
vue全局配置请求token_Vue中登录验证成功后保存token,并每次请求携带并验证token操作... 2019-06-17