本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!