自定义RPC框架实战(二) 实现
转载请标注原文地址:https://blog.csdn.net/lilyssh/article/details/84306533
项目源码地址:https://gitee.com/lilyssh/lilyssh-rpc
一、创建项目:
我们需要写三个项目:注册中心registry、rpc框架lrpc 和 使用lrpc的demo项目。demo和registry都是Spring Boot
项目,lrpc是一个jar
包,demo引用lrpc的jar
包,使lrpc嵌入到demo里,这样启动demo时lrpc就会把服务信息捞出来,封装成lrpc和registry约定好的json
格式字符串,通过netty
发送给registry。
pom.xml
中引入插件时,如果是Spring Boot
项目,就用Spring Boot
的Maven
插件(spring-boot-maven-plugin
),它能够将Spring Boot
应用打包为可执行的jar
或war
文件,然后以通常的方式运行Spring Boot
应用。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
非spring boot
项目,就用原装maven
插件:maven-compiler-plugin
,maven
是个项目管理工具,如果我们不告诉它我们的代码要使用什么样的jdk
版本编译的话,它就会用maven-compiler-plugin
默认的jdk
版本来进行处理,这样就容易出现版本不匹配,以至于可能导致编译不通过的问题。maven
的默认编译使用的jdk版本貌似很低,使用maven-compiler-plugin
插件可以指定项目源码的jdk版本,编译后的jdk
版本,以及编码。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
二、注册服务
- 暴露本地服务
- 暴露远程服务
- 启动netty
- 连接zookeeper
- 到zookeeper注册
- 监听zookeeper
为什么会有本地暴露和远程暴露呢?在dubbo中一个服务可能既是Provider,又是Consumer,因此就存在他自己调用自己服务的情况,如果再通过网络去访问,那自然是舍近求远,因此要有本地暴露服务。两者的区别:
- 本地暴露是暴露在JVM中,不需要网络通信。
- 远程暴露是将ip,端口等信息暴露给远程客户端,调用时需要网络通信。
1.暴露本地服务
2.暴露远程服务
3.启动netty
4.连接zookeeper
5.到zookeeper注册
6.监听zookeeper
1.在lrcp中通过netty
发送信息给registry,registry接受字符串。
为什么选择netty
呢,因为它并发高,传输快,封装好。Netty
是一款基于NIO
(Nonblocking I/O
,非阻塞IO)开发的网络通信框架,对比于BIO
(Blocking I/O
,阻塞IO),他的并发性能得到了很大提高。
具体实现请参考: https://blog.csdn.net/lilyssh/article/details/84306563
2.在lrcp中写个自定义注解,包装服务。扫描到这些的时候,就自动捞取了。
具体实现请参考: https://blog.csdn.net/lilyssh/article/details/84306592
// TODO 在实现过程中,会不断完善此设计文档。
上一篇: 一段实用的php验证码函数_PHP
下一篇: 算法数据结构(十五)----暴力递归