All Projects → alibaba → Alibaba Rsocket Broker

alibaba / Alibaba Rsocket Broker

Licence: apache-2.0
Alibaba RSocket Broker: Mesh, Streaming & IoT

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Alibaba Rsocket Broker

Skyapm Php Sdk
The PHP instrument agent for Apache SkyWalking
Stars: ✭ 292 (-39.79%)
Mutual labels:  grpc, service-mesh
Tonic
A native gRPC client & server implementation with async/await support.
Stars: ✭ 4,422 (+811.75%)
Mutual labels:  grpc, rpc
Socket Mqtt
基于Netty+MQTT的高性能推送服务框架。支持普通Socket、MQTT、MQTT web socket协议。非常方便接入上层业务实现推送业务。
Stars: ✭ 314 (-35.26%)
Mutual labels:  rpc, iot
Flatbuffers
FlatBuffers: Memory Efficient Serialization Library
Stars: ✭ 17,180 (+3442.27%)
Mutual labels:  grpc, rpc
Akka Grpc
Akka gRPC
Stars: ✭ 361 (-25.57%)
Mutual labels:  grpc, rpc
Armeria
Your go-to microservice framework for any situation, from the creator of Netty et al. You can build any type of microservice leveraging your favorite technologies, including gRPC, Thrift, Kotlin, Retrofit, Reactive Streams, Spring Boot and Dropwizard.
Stars: ✭ 3,392 (+599.38%)
Mutual labels:  grpc, rpc
Gb28181.solution
Linux/Win/Docker/kubernetes/Chart/Kustomize/GB28181/SIP/RTP/SDP/WebRTC/作为上下级域/平台级联互联
Stars: ✭ 323 (-33.4%)
Mutual labels:  grpc, rpc
meshRPC
Automatic Service Mesh and RPC generation for Go micro services, it's a humble alternative to gRPC with Istio.
Stars: ✭ 69 (-85.77%)
Mutual labels:  grpc, service-mesh
Rpc Websockets
JSON-RPC 2.0 implementation over WebSockets for Node.js and JavaScript/TypeScript
Stars: ✭ 344 (-29.07%)
Mutual labels:  rpc, iot
Smart Socket
A High Performance Java AIO framework
Stars: ✭ 341 (-29.69%)
Mutual labels:  rpc, iot
Rpc Benchmark
java rpc benchmark, 灵感源自 https://www.techempower.com/benchmarks/
Stars: ✭ 463 (-4.54%)
Mutual labels:  grpc, rpc
Javaspringbootsamples
SpringBoot、Dubbo、SpringCloud的各种集成例子:Atomikos、gRPC、Thrift、Seata、ShardingSphere、Dubbo、Hmily、Nacos、Consul、Ribbon、Jedis、Lettuce、Redisson等框架
Stars: ✭ 399 (-17.73%)
Mutual labels:  grpc, rpc
Yarpc Go
A message passing platform for Go
Stars: ✭ 285 (-41.24%)
Mutual labels:  grpc, rpc
Joyrpc
high-performance, high-extensibility Java rpc framework.
Stars: ✭ 290 (-40.21%)
Mutual labels:  grpc, rpc
tsrpc
A TypeScript RPC framework, with runtime type checking and serialization, support both HTTP and WebSocket. It is very suitable for website / APP / games, and absolutely comfortable to full-stack TypeScript developers.
Stars: ✭ 866 (+78.56%)
Mutual labels:  grpc, rpc
Vertx Zero
Zero Framework:http://www.vertxup.cn
Stars: ✭ 320 (-34.02%)
Mutual labels:  grpc, service-mesh
drpc
drpc is a lightweight, drop-in replacement for gRPC
Stars: ✭ 1,014 (+109.07%)
Mutual labels:  grpc, rpc
thinkgo
Public libraries and components for glang development.
Stars: ✭ 14 (-97.11%)
Mutual labels:  grpc, rpc
Nacos
an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.
Stars: ✭ 20,691 (+4166.19%)
Mutual labels:  alibaba, service-mesh
Go Api Boilerplate
Go Server/API boilerplate using best practices DDD CQRS ES gRPC
Stars: ✭ 373 (-23.09%)
Mutual labels:  grpc, rpc

logo

Gitter Maven GitHub repo size Open Issues Build Status Apache License 2

Alibaba RSocket Broker是一款基于RSocket协议的反应式对等通讯系统,为通讯多方构建分布式的RPC, Pub/Sub, Streaming等通讯支持。

  • 反应式: 无需担心线程模型、全异步化、流式背压支持、独特的对等通讯模式可适应各种内部网络环境和跨云混云的需求。
  • 程控:完善的控制面(Control Plane)支持,可定制和方便的功能扩展,如支持反向的Prometheus Metrics采集、ZipKin RSocket Collector、Chaos等。
  • 消息:面向消息通讯,服务路由、过滤、observability都非常简单。
  • 交换系统:完全分布式、异构系统整合简单,无论应用什么语言开发、部署在哪里,都可以相互通讯。

更多RSocket Broker介绍,请访问产品Wiki https://github.com/alibaba/alibaba-rsocket-broker/wiki 或者 RSocket by Example http://rsocketbyexample.info 也可以参与Github Discussions讨论: https://github.com/alibaba/alibaba-rsocket-broker/discussions

RSocket Broker工作原理

RSocket Broker桥接应用间通讯的双方,相当于一个中间人的角色。 应用在启动后,和Broker创建一个长连接,在连接创建的时候需要标明自己的身份,如果是服务提供者,会注册自己能提供的服务信息。 Broker会针对所有的连接和服务列表建立对应的映射关系。 当一个应用需要调用其他服务时,应用会将请求以消息的方式发给Broker,然后Broker会解析消息的元信息,然后根据路由表将请求转发给服务提供者,然后将处理结果后的消息再转发给调用方。 Broker完全是异步化的,你不需要关心线程池这些概念,而且消息转发都是基于Zero Copy,所以性能非常高,这也是为何不用担心中心化Broker成为性能瓶颈的主要原因。

RSocket Broker Structure

通过上述的架构图,RSocket Broker彻底解决了传统设计中众多的问题:

  • 配置推送: 连接已经建立,只需要通过RSocket的metadataPush可以完成配置推送
  • 服务注册和发现:应用和Broker建立连接后,这个长连接就是服务注册和发现,你不需要额外的服务注册中心
  • 透明路由: 应用在调用服务时,不需要知道服务对应的应用信息, Broker会完成路由
  • Service-to-service调用: RSocket提供的4个模型可以很好地解决服务到服务调用的各种复杂需求
  • Load balancing: 所有的应用和Broker建立长连接后,负载均衡在broker中心路由表完成,对应用完全透明。
  • Circuit Breakers: 断路保护,现在调整为Back Pressure支持,更贴近实际业务场景
  • Distributed messaging: RSocket本身就是基于消息推送的,而且是分布式的。
  • 多语言支持: RSocket是一套标准协议,主流语言的SDK都有支持,详情请访问 RSocket SDK Stack

项目模块

  • alibaba-rsocket-service-common: RSocket服务接口定义基础模块,包括Annotation, Reactive相关框架和支撑类
  • alibaba-rsocket-core: RSocket核心功能模块
  • alibaba-rsocket-spring-boot-starter: Spring Boot Starter for RSocket, 包括RSocket服务发布和消费
  • alibaba-broker-spring-boot-starter: Spring Boot Starter for RSocket Broker, 方便第三方进行扩展
  • alibaba-rsocket-broker: Alibaba RSocket Broker参考实现
  • alibaba-broker-registry-client-spring-boot-starter: 通过RSocket Broker对外提供服务发现服务
  • alibaba-broker-config-client-spring-boot-starter: 通过RSocket Broker对外提供配置推送服务
  • rsocket-broker-gateway-http: RSocket Broker HTTP网关,将HTTP转换为RSocket协议
  • rsocket-broker-gateway-grpc: RSocket Broker gRPC网关,将gRPC转换为RSocket协议

开发环境要求

  • JDK 1.8.0+
  • Maven 3.5.x
  • Node 10+: RSocket Broker采用Vaadin 14构建控制界面,所以你需要安装Node 10以上版本

如何运行Example?

注意: 样例代码中的AccountService接口采用了Protobuf进行序列化,使用了protobuf-maven-plugin生成对应的Protobuf, 建议使用IDE导入项目之前,首先在项目的根目录下执行一下"mvn -DskipTests package"完成Protobuf对应的代码生成,不然直接在IDE中编译可能出现编译不通过的情况。

项目提供了完成的样例,你可以在example模块下找到,包括服务接口定义、服务实现和服务调用三个部分。

Docker Compose运行RSocket Broker

如果你本机已经安装了Docker和Docker Compose,建议直接运行 'docker-compose up -d' 启动RSocket Broker,当然你也可以手动运行RSocket Broker.

手动运行RSocket Broker
  • 找到AlibabaRSocketBrokerServer类,运行main函数,启动RSocket Broker
运行 RSocket Responder & Requester
  • 找到RSocketResponderServer类,运行main函数,启动RSocket Responder对外提供Reactive服务
  • 找到RSocketRequesterApp类,运行main函数,启动RSocket Requester, 进行Reactive Service消费
  • 在IDEA中,找到example.http,运行 "GET http://localhost:8181/user/2" 或者运行以下命令,进行服务调用测试。
$ curl http://localhost:8181/user/2

样例的详细介绍请访问 Example

RSocket服务编写流程

包括如何创建一个Reactive服务接口,在Responder端实现该接口,在Requester完成Reactive服务调用,以及通讯双方是如何和Broker交互的。

  • 创建一个RSocket服务接口,你可以创建一个单独的Maven Module存放这些接口,如user-service-api,样例代码如下:
public interface UserService {
    Mono<User> findById(Integer id);
}
  • 在RSocket Responder端实现该接口,同时给实现类添加 @RSocketService annotation,如下:
@RSocketService(serviceInterface = UserService.class)
@Service
public class UserServiceImpl implements UserService {
    @Override
    public Mono<User> findById(Integer id) {
        return Mono.just(new User(1, "nick:" + id));
    }
}

不少开发者会问道,如果是MySQL数据库,如何和Reactive集成。目前R2DBC有对MySQL的支持,你可以参考一个Spring Cloud RSocket + R2DBC + MySQL的Demo实现: https://github.com/linux-china/spring-cloud-function-demo/

  • 在RSocket Requester,以Proxy方式创建Reactive服务接口对应的Spring bean, 如下:
    @Bean
    public UserService userService(@Autowired UpstreamManager upstreamManager) {
        return RSocketRemoteServiceBuilder
                .client(UserService.class)
                .upstreamManager(upstreamManager)
                .build();
    }
  • 在RSocket Requester端,进行代码调用,如HTTP REST API提供给:
@RestController
public class PortalController {
    @Autowired
    UserService userService;

    @GetMapping("/user/{id}")
    public Mono<User> user(@PathVariable Integer id) {
        return userService.findById(id);
    }
}

服务和支持

References

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].