EventBus、Rxjava、RxBus的定义、作用、使用方式及区别

这篇文章是在读了别人的文章的基础上并结合工作中项目做的总结,总共分为以下几个部分,这只是简单总结,想了解更多原理的可以点击后面的相关链接:

1、什么是Evenbus?有什么用?怎么用?
2、什么是Rxjava?有什么用?怎么用?
3、什么是RxBus?有什么用?怎么用?
4、RxBus和EventBus区别是什么?
5、相关学习链接

下面进入正题:

1、什么是Evenbus?有什么用?怎么用?

定义:一个发布 / 订阅的事件总线,是一个开源库;
作用:选择使用它来进行模块间通信、解耦;
使用方式:EventBus库中最重要的三个点,分别是subscriber(订阅者),事件(消息),publisher(发布者)。主要理解这三者的关系即可。
subscriber ——> EventBus 的register方法,传入的object对象
事件(Event)——> EventBus 的post方法,传入的类型。
publisher(发布者)——> EventBus的post方法。
第一步:创建一个事件,说白了就是创建一个类,也就是用来传递的东西,消息,类似bean,比如第二步的EvenMessage类;
第二步:在需要订阅事件的模块中,注册eventbus,在需要接受事件的类中进行好register之后,需要在该类中创建一个方法来接收事件消息,如下。在不用的时候千万别忘了unregister。
在这里插入图片描述
第三步:在需要发送事件的地方,调用EventBus的post(Object event),postSticky(Object event)来通知订阅者,如下:
在这里插入图片描述

2、什么是Rxjava?有什么用?怎么用?

定义:实现异步操作的开源库;
作用:逻辑上(不一定是代码量),更为简洁地实现异步操作,特别是需求变复杂的时候,这一优势更加明显;
使用方式:RxJava 有四个基本概念:Observable(可观察者,即被观察者)、Observer(观察者)、subscribe(订阅)、事件。Observable和Observer通过subscribe()方法实现订阅关系,从而Observable可以在需要的时候发出事件来通知Observer。
与传统观察者模式不同,RxJava 的事件回调方法除了普通事件onNext()(相当于onClick()/onEvent())之外,还定义了两个特殊的事件:onCompleted()和onError()。
第一步:创建 Observer。Observer 即观察者,它决定事件触发的时候将有怎样的行为。法一:通过Observer接口;法二:通过Observer的抽象类:Subscriber,Subscriber对Observer接口进行了一些扩展,但他们的基本使用方式是完全一样的:
在这里插入图片描述
在这里插入图片描述
第二步:创建 Observable。Observable 即被观察者,它决定什么时候触发事件以及触发怎样的事件。RxJava 使用 create() 方法来创建一个Observable ,并为它定义事件触发规则:
在这里插入图片描述
第三步:Subscribe (订阅)。创建了 Observable 和 Observer 之后,再用 subscribe() 方法将它们联结起来,整条链子就可以工作了。
在这里插入图片描述
注意:在 RxJava 的默认规则中,事件的发出和消费都是在同一个线程的。也就是说,如果只用上面的方法,实现出来的只是一个同步的观察者模式。观察者模式本身的目的就是『后台处理,前台回调』的异步机制,因此异步对于 RxJava 是至关重要的。而要实现异步,则需要用到 RxJava 的另一个概念: Scheduler 。
在这里插入图片描述

3、什么是RxBus?有什么用?怎么用?

定义:一种模式,但它不是一个库,由Rxjava封装而来;
作用:类似EventBus,如果你的项目已经加入RxJava和EventBus,不妨用RxBus代替EventBus,以减少库的依赖。
使用方式:
第一步:新建RxBus类;Subject同时充当了Observer和Observable的角色,Subject是非线程安全的,在并发情况下,不推荐使用通常的Subject对象,而是推荐使用SerializedSubject,ofType操作符只发射指定类型的数据,其内部就是filter+cast。
在这里插入图片描述
在这里插入图片描述
第二步:创建需要发送的事件类
在这里插入图片描述
第三步:发送事件
在这里插入图片描述
第四步:接收事件。rxSbscription是Sbscriptio的对象,我们这里把RxBus.getInstance().toObserverable(StudentEvent.class)赋值给rxSbscription以方便生命周期结束时取消订阅事件
在这里插入图片描述
第五步:取消订阅
在这里插入图片描述

4、RxBus和EventBus区别是什么?

RxJava 主要做异步、网络的数据处理,强大之处就是对数据的处理了,而对于处理完后的数据处理是一样的都是观察者模式来通知,也可以把 RxJava 进一步封装出一个 EventBus(RxBus)库,二者可以转换的。
EventBus比较适合仅仅当做组件间的通讯工具使用,主要用来传递消息。使用EventBus可以避免搞出一大推的interface,仅仅是为了实现组件间的通讯,而不得不去实现那一推的接口。

5、相关学习链接

EventBus:
Android EventBus实战 没听过你就out了
EventBus 使用(全面分析,细节提醒)

Rxjava:
给 Android 开发者的 RxJava 详解

RxBus:
RxBus的实现及简单使用
RxBus使用

如有不当之处,欢迎指正

<think>好的,我需要回答用户关于Kubernetes日常运维操作及常用命令的问题。首先,用户提供了四个引用来源,我需要确保回答中正确引用这些资料。根据用户的要求,回答需要结构清晰,分步骤说明,并包含相关问题。 首先,我需要整理Kubernetes日常运维的常见操作和对应的命令。常见操作可能包括节点管理、Pod调试、资源伸缩、存储管理、日志查看、备份恢复等。接下来,我要结合用户提供的引用内容,将这些操作和命令对应到引用来源上。 例如,引用[3]提到了使用kubectl replace修改节点状态,这可能涉及节点调度管理。引用[2]提到了使用crictl exec在容器内执行命令,这属于Pod调试的一部分。引用[1]中的持久化存储和资源自动伸缩需要涵盖存储管理和资源伸缩的内容。引用[4]提到了备份etcd数据,这属于集群维护部分。 接下来,我需要确保每个部分都自然地引用对应的来源。例如,在节点管理中提到的不可调度设置,可以引用[3];在Pod调试中执行容器命令的部分引用[2];存储管理部分引用[1];备份恢复引用[4]。 同时,要遵循系统级指令,使用正确的中文回答,数学公式用$...$,独立公式用$$...$$,但在这个问题中可能数学公式较少,但需注意LaTeX的正确使用。然后生成相关问题,这些问题应覆盖提到的各个运维方面,比如节点管理、Pod故障排查、存储配置、日志收集、备份策略和资源优化等。 最后,检查回答的结构是否清晰,是否有分点说明,引用是否恰当,以及是否符合用户的所有要求,包括命令示例的正确性和相关问题的相关性。</think>### Kubernetes日常运维操作及常用命令指南 #### 一、节点管理与调度 1. **节点状态管理** - 标记节点为不可调度(维护模式): ```bash kubectl cordon <node-name> ``` 恢复调度: ```bash kubectl uncordon <node-name> ``` 修改节点状态时,可编辑YAML文件并通过`kubectl replace`应用更改[^3]。 2. **查看节点资源** ```bash kubectl describe nodes <node-name> # 查看节点详细信息 kubectl top nodes # 显示节点资源使用情况 ``` --- #### 二、Pod调试与操作 1. **Pod生命周期管理** - 重启Pod(通过删除重建): ```bash kubectl delete pod <pod-name> ``` - 进入容器执行命令(需容器运行时支持): ```bash kubectl exec -it <pod-name> -- /bin/sh ``` 若使用CRI运行时(如containerd),可通过`crictl exec`直接操作容器[^2]。 2. **查看日志** ```bash kubectl logs <pod-name> # 查看标准输出日志 kubectl logs -f <pod-name> # 实时追踪日志 kubectl logs --previous <pod-name> # 查看崩溃容器的历史日志 ``` --- #### 三、资源伸缩与自动扩缩 1. **手动扩缩Deployment** ```bash kubectl scale deployment/<deploy-name> --replicas=3 ``` 2. **Horizontal Pod Autoscaler (HPA)** 自动根据CPU/内存使用率调整副本数,需提前部署Metrics Server: ```bash kubectl autoscale deployment/<deploy-name> --cpu-percent=50 --min=1 --max=10 ``` 此操作引用自Kubernetes资源自动伸缩方法[^1]。 --- #### 四、持久化存储管理 1. **查看PVC/PV状态** ```bash kubectl get pvc # 查看持久卷声明 kubectl describe pv <pv-name> # 检查存储卷详细信息 ``` 存储配置需参考持久化存储最佳实践。 2. **动态存储配置** 通过StorageClass定义动态存储分配,例如: ```yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast provisioner: kubernetes.io/aws-ebs ``` --- #### 五、集群维护与备份 1. **etcd数据备份** 备份关键集群数据(如etcd): ```bash ETCDCTL_API=3 etcdctl --endpoints=<etcd-endpoint> snapshot save snapshot.db ``` 参考备份操作需移动etcd.yaml并备份数据[^4]。 2. **配置更新与回滚** - 应用配置变更: ```bash kubectl apply -f updated-config.yaml ``` - 回滚到历史版本: ```bash kubectl rollout undo deployment/<deploy-name> ``` --- #### 六、网络与服务管理 1. **服务暴露与负载均衡** - 创建四层负载均衡Service: ```yaml apiVersion: v1 kind: Service metadata: name: my-service spec: type: LoadBalancer ports: - port: 80 selector: app: my-app ``` 引用自Kubernetes四层负载均衡配置。 2. **查看服务端点** ```bash kubectl get endpoints <service-name> # 验证Service关联的Pod IP ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值