# RabbitRpc
**Repository Path**: youpiao_admin/spring-cloud-rabbitrpc
## Basic Information
- **Project Name**: RabbitRpc
- **Description**: 基于spring cloud的微服务 rpc 调用
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: rabbitrpc-v1.0.0-dev-yx
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 2
- **Created**: 2022-05-06
- **Last Updated**: 2022-05-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Spring Cloud RabbitRpc
#### 组件介绍
目前微服务应用和开发已经成为主流,远程调用,服务治理方面我们通常有两个选择,spring cloud 和 ali 的dubbo,spring cloud 提供了非常容易上手的全家桶模式,也是目前很多公司的选择,在远程调用方面基于openfeign实现,底层逻辑是 http 协议,所以被业界称为伪 rpc,而选用 dubbo吧,生态不是很完整,ali 内部更多却在使用HSF 和 dubbo从远程调用方面和服务治理方面 HSF的用户多一些,但是HSF没有开源,ali 也出了 spring cloud alibaba 版本。但是在一些需求上面趋向于商业化,很多公司不想上船,在并发要求不是很高的环境下,基于 http 协议的远程调用无可厚非,但是如果要构建高并发应用,http 协议的解析效率低,同步等待问题就成了远程调用的性能瓶颈。很多公司为了满足需求,也有spring cloud 和 dubbo并存的奇葩方案。
rabbitrpc 为解决这一需求而设计,既有dubbo的性能又能满足在 spring cloud生态里轻松集成使用。
**v1.0.0** 版本 的 **features**。
###### 1 支持与spring cloud 集成。
###### 2 支持异步请求。
###### 3 支持 eureka 注册中心。
###### 4 自定义 rabbit 协议,请求头只有15个字节。
###### 5 序列化 支持 hessian,后续会加入protolbuf实现
###### 6 支持SPI 动态加载机制。
###### 7 支持一个应用双端口,支持rabbit,http双协议,根据需要来选择。
#### quick start
maven 引入 rabbitrpc-spring-boot-starte
```
com.yixiu.rabbitrpc
rabbitrpc-spring-boot-starter
1.0.0-SNAPSHOT
```
**如果是服务端**
1 需要提供api,需要定义如下,在提供的接口上添加注解配置。
```java
@RabbitRpcClient(facadeId = "userService",facadeType = "com.yixiu.server.api.facade.UserFacade",name = "rabbitrpc-user-server",group = "rabbit")
public interface UserFacade {
/**
* 根据id 获取一个用户
* @param id
* @return
*/
User getUser(Long id);
}
```
一般常用配置解释
facadeId:接口id
facadeType:接口类型
name:服务名称
group:分组名称
2 在properties 文件添加如下配置
```
protocol.name=rabbit
protocol.port=20918
```
protocol.name 定义 rabbitrpc 要使用的协议,protocol.por 服务端开放监听的端口号。
3 在spring boot 启动入口,添加如下注解配置 @EnableRabbitRpcServices
```java
@EnableEurekaClient
@EnableDiscoveryClient
@SpringBootApplication
@EnableRabbitRpcServices(basePackages = "com.yixiu.server.api")
public class RabbitRpcServerApplication {
public static void main(String[] args) {
SpringApplication.run(RabbitRpcServerApplication.class);
}
}
```
basePackages:接口定义包路径
**如果是客户端**
1 只需要将服务端提供的 api 引入,例如。
```
org.example
rabbitrpc-server-api
1.0-SNAPSHOT
```
2 在spring boot 启动入口添加如下注解配置 @EnableRabbitRpcClients
```java
@EnableEurekaClient
@EnableDiscoveryClient
@SpringBootApplication
@EnableRabbitRpcClients(basePackages = "com.yixiu.server")
public class RabbitClientApplication {
public static void main(String[] args) {
SpringApplication.run(RabbitClientApplication.class);
}
}
```
basePackages: 即api jar包的根路径。
如上配置完成就可以像本地方法一样使用远程服务了。