将你的 Discord Bot 添加到你的服务器 为了测试我们的机器人,需要一台Discord服务器。你可以使用现有服务器或创建新服务器。...client_id=ID>&scope=bot 当你在浏览器中点击此URL时,会出现一个表单,你可以在其中选择应添加机器人的服务器。 ?...标准Discord欢迎消息 将bot添加到服务器后,你应该会看到如上所示的消息。 创建 .env 文件 我们需要一种能够在自己的程序中保存令牌的方法。为了做到这一点,我们将使用 dotenv 包。...如果你在服务器通道中输入消息,它应该出现在命令行的日志中,如下所示: 1> node src/index.js 2 3Logged in! 4Message received!...在单元测试中的关键是定义 isPing():true 或 false 的结果。消息内容是什么并不重要,所以在测试中我们只使用 "Non-empty string"。
获取主服务器信息 Sentinel会以一定频率向主服务器发送Info命令获取信息,包括主服务器自身的信息比如说服务器id等,以及对应的从服务器信息,包括ip和port。...Sentinel会定时的通过订阅连接向_sentinel_:hello频道频道发送消息(对Redis发布订阅功能不太了解的同学可以去去了解下),其中包括: Sentinel本身的信息,如ip地址、端口号...、配置纪元(见下文)等 Sentinel监视的主服务器的信息,包括ip、端口、配置纪元(见下文)等 同时,Sentinel也会订阅_sentinel_:hello频道的消息,也就是说Sentinel即向该频道发布消息...Sentinel有一个字典对象sentinels,保存着监视同一主服务器的其他所有Sentinel服务器,当一个Sentinel接收到来自_sentinel_:hello频道的消息时,会先比较发送该消息的是不是自己...,则选取复制偏移量最大的那个 6.如果上一步的服务器还有多个,则选取id最小的那个
当从服务器断线并重新连上一个主服务器时,从服务器将会向当前的主服务器发送之前保存的运行ID。...向主服务器和从服务器发送频道信息(4)Sentinel接收来自主和从服务器的频道信息(5)Sentinel通过订阅频道更新的认知(1)Sentinel获取主服务器信息Sentinel默认会以每10秒一次的频率...对于监视同一个服务器的多个Sentinel来说,一个Sentinel向__sentinel__:hello频道发送的消息,会被其他Sentinel接收到,其他Sentinel接收到这些信息可以更新对发送信息的...和检测客观下线时发送的命令sentinel is-master-down-by-addr不同,这次发送会带上运行ID。...所有接收到这条public消息的节点都会向自己的channel频道发送message消息,这样订阅了集群的channel频道的客户端才能确保收到消息。
当有新消息通过 PUBLISH 命令发送给频道时,这个消息会被发送给订阅它的所有客户端 1.2、Redis发布订阅与消息队列的区别 Redis的发布订阅(Pub/Sub)和消息队列是两种不同的消息传递模式...UNSUBSCRIBE 命令:当客户端发送 UNSUBSCRIBE 命令退订一个或多个频道时,Redis 服务器会将这些频道从客户端的订阅频道列表中移除,并向客户端返回一个确认退订的消息。...当客户端发送 SUBSCRIBE 命令订阅一个或多个频道时,服务器会接收到这个命令,并将这些频道添加到客户端的订阅列表中。然后,服务器会向客户端返回一个消息,确认已经订阅了这些频道。...当客户端发送 UNSUBSCRIBE 命令退订一个或多个频道时,服务器会接收到这个命令,并将这些频道从客户端的订阅列表中移除。然后,服务器会向客户端返回一个消息,确认已经退订了这些频道。...例如,客户端可以发送如下命令向名为 mychannel 的频道发布一条消息: PUBLISH mychannel "hello" 服务器会返回一个整数,表示消息成功发送到的客户端数量。
获取主服务器信息 Sentinel会以一定频率向主服务器发送Info命令获取信息,包括主服务器自身的信息比如说服务器id等,以及对应的从服务器信息,包括ip和port。...Sentinel会定时的通过订阅连接向_sentinel_:hello频道频道发送消息(对Redis发布订阅功能不太了解的同学可以去去了解下),其中包括: Sentinel本身的信息,如ip地址、端口号...、配置纪元(见下文)等 Sentinel监视的主服务器的信息,包括ip、端口、配置纪元(见下文)等 同时,Sentinel也会订阅_sentinel_:hello频道的消息,也就是说Sentinel即向该频道发布消息...Sentinel有一个字典对象sentinels,保存着监视同一主服务器的其他所有Sentinel服务器,当一个Sentinel接收到来自_sentinel_:hello频道的消息时,会先比较发送该消息的是不是自己...,则选取复制偏移量最大的那个 6.如果上一步的服务器还有多个,则选取id最小的那个 原文:Java架构笔记
任务队列的好处 1)松耦合。 生产者和消费者只需按照约定的任务描述格式,进行编写代码。 2)易于扩展。 多消费者模式下,消费者可以分布在多个不同的服务器中,由此降低单台服务器的负载。...可以这么简单的理解: 1)Subscriber:收音机,可以收到多个频道,并以队列方式显示 2)Publisher:电台,可以往不同的FM频道中发消息 3)Channel:不同频率的FM频道 ...主要应用:通知、公告  多个发布者一个订阅者模型 可以将PubSub做成独立的HTTP接口,各应用程序作为Publisher向Channel中发送消息,Subscriber端收到消息后执行相应的业务逻辑... 多个发布者多个订阅者模型 故名思议,就是可以向不同的Channel中发送消息,由不同的Subscriber接收。 主要应用:群聊、聊天。...查看订阅与发布系统状态 _注意:_使用发布订阅模式实现的消息队列,当有客户端订阅channel后只能收到后续发布到该频道的消息,之前发送的不会缓存,必须Provider和Consumer同时在线。
订阅连接:订阅某个频道,频道有消息马上读取,一个频道上的消息会发给多个订阅者,所以是一发多收 命令连接:收发方 简单通过命令通信(udp?)...检查从服务器和主服务器间通信的延迟 3. 检测从服务器偏移量是否和当前偏移量相同,不同的话就要发送命令,让从服务器偏移量跟上 4....sentinel 的配置中直接指明 他需要监听的主服务器的 IP 和 端口 (未知是否可以监听多个主) sentinel 启动的时候直接向 他的主服务器 发送 INFO ,主服务器收到后会发送自己的从服务器列表...是订阅主服务器的 sentinel-hello 频道的,只要有一个sentinel 监听这个主服务器,主服务器就会向这个频道上发送 消息。...如果有多个sentinel 监听这个频道,而且有新的 sentinel 监听主服务器,那么这些监听 主服务器的 sentinel 都会认识到 新的 sentinel 多个 sentinel 之间单纯创建
基于 Go 语言使用 NATS Streaming构建分布式系统和微服务 一段时间前,我写了一篇名为向 Go 语言开发者介绍 NATS 的博客文章以便使用Apcera NATS 作为基于GO语言的构建分布式系统和微服务的消息系统...频道 ( Channel ) 频道是 NATS Streaming 服务器中最重要的概念。频道是发送数据并从中消耗的客户端。...与基本的 NATS 服务器不同,NATS Streaming 服务器不支持频道的通配符。你可以使用配置来控制频道数量。发布到频道的消息存储在频道内的消息日志中,如下图所示。...在创建订阅时,服务器将发送由订阅客户端提供的最大数量订阅消息(你可以指定订阅消息的最大数量)。当从订户客户端收到消息时,ACK(确认)将被发送到服务器。...使用队列组创建订户客户端 订阅者客户端可以通过指定一个队列组来创建。具有相同队列名称的同一频道的多个订户客户端形成队列组。队列订阅者可让你分发多个订户的消息处理。
(订阅者),而是将消息分成不同的类别(频道),然后将消息发送给订阅了这些类别的所有接收者。...在 Redis 中,发布/订阅模式的实现基于 Redis 的事件机制,即订阅者通过执行 SUBSCRIBE 命令将自己的监听器添加到 Redis 服务器的事件循环器中,当发布者通过 PUBLISH 命令向指定频道发送消息时...当发布者通过 PUBLISH 命令向指定频道发送消息时,Redis 服务器会将消息发送给与该频道相关的事件处理器中的所有监听器,从而实现消息的发布和订阅。...基于模式的发布/订阅与基于频道的发布/订阅实现原理类似,只是在订阅时可以使用通配符(*)匹配多个频道,从而实现更加灵活的消息过滤和订阅。 ...当发布者通过 PUBLISH 命令向与匹配该模式的频道发送消息时,Redis 服务器会将消息发送给与该模式相关的事件处理器中的所有监听器,从而实现基于模式的消息发布和订阅。
步骤如下 初始化服务器 使用Sentinel专用代码 初始化Sentinel状态 创建连向主服务器的网络连接 4.1 初始化服务器 Sentinel 本质上只是一个运行在特殊模式下的Redis服务器,所以初始化时和不同的...哨兵会向主服务器创建两个异步网络连接 命令连接,用于向主服务器发送命令,并接受命令。 订阅连接,专门用于订阅主服务器的_sentinel_:hello频道。...5.3 获取其他Sentinel的信息 在获取其他哨兵的信息之前,先要知道向主服务器和从服务器发送信息和接收来自主服务器和从服务器的频道信息。...5.3.2 接收来自主服务器和从服务器的频道信息 当Sentinel与一个主服务器或者从服务器建立起订阅连接之后,Sentinel就会通过订阅连接,向服务器发送命令: SUBSCRIBE __sentinel...当哨兵接收到一条来自__sentinel__:hello频道的消息时,会出现下方 判断该消息是否是自己发送的,是则忽略这条消息 消息不是自己发送时,说明有新的哨兵 查看自己是否存有该哨兵的信息,有则更新该哨兵的信息
创建连接的示意图如下所示: 三、获取主服务器信息 哨兵默认会以每10s一次的频率向被监视的主服务器发送info命令,主服务器会对命令进行回复,回复内容包括主服务器运行id以及主服务器下属的从服务器信息...示意图如下所示: 创建连接以后,哨兵也会每10s一次的频率向从服务器发送info命令,获得对应的信息来更新如下所示的从服务器结构: 五、向主从服务器发送信息 哨兵会以每2秒一次的频率,通过命令连接向主从服务器发送信息...,发送的信息为:向__sentinel__:hello频道发布消息,消息内容包括哨兵的ip、端口、运行id、主服务器的名称、ip、端口等信息,向从服务器发送的是它所属的主服务器的名称、ip、端口。...六、从主从服务器接收信息 当哨兵和主从服务器建立起订阅连接以后,就会通过订阅连接,向服务器发送订阅__sentinel__:hello频道的命令。...如下所示: 2.创建连向其他哨兵的命令连接 当哨兵通过订阅频道获取到其他哨兵的信息时,还会根据获取的消息创建指向其他哨兵节点的命令连接。
获取主服务器信息 Sentinel默认每10s一次,向被监控的主服务器发送info命令,获取主服务器和其下属从服务器的信息。 三....在命令连接建立之后,Sentinel还是默认10s一次,向从服务器发送info命令,并记录从服务器的信息。 四....向主服务器和从服务器发送消息 默认情况下,Sentinel每2s一次,向所有被监视的主服务器和从服务器所订阅的_sentinel_:hello频道上发送消息,消息中会携带Sentinel自身的信息和主服务器的信息...接收来自主服务器和从服务器的频道信息 多个监控同一个主服务器的Sentinel,都会发送频道消息,这样其他的Sentinel就都会接收到。...Sentinel集群中的各个节点,通过频道消息感知彼此的存在。
3 PFMERGE destkey sourcekey [sourcekey …] 将多个 HyperLogLog 合并为一个 HyperLogLog Redis发送订阅 发送者(发布者)不是计划发送消息给特定的接收者...而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅。订阅者对一个或多个频道感兴趣,只需接收感兴趣的消息,不需要知道什么样的发布者发布的。...管道Pipelining 过去:客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应 现在:在旧的请求还未响应前,新的请求也能发送到服务器并处理。...假设在上面示例中,从ID 0到ID 10000的用户将进入实例R0,而从ID 10001到ID 20000的用户将进入实例R1,以此类推。...哈希分区 在这种类型的分区中,使用散列函数(例如,模函数)将键转换成数字,然后将数据存储在不同的Redis实例中。
:1) 客户端向服务器发送命令请求。...1.同时使用多个save选项Redis允许用户同时向服务器提供多个save选项,当给定选项中的任意一个条件被满足时,服务器就会执行一次BGSAVE。...除此之外,客户端还可以通过向频道发送消息的方式,将消息发送给频道的所有订阅者,我们把这些发送消息的客户端称为发送者(publisher)。...客户端订阅频道图片订阅模式图片3.5.1、PUBLISH:向频道发送消息用户可以通过执行PUBLISH命令,将一条消息发送至给定频道:...命令,让客户端订阅给定的一个或多个频道:SUBSCRIBE channel [channel channel ...]SUBSCRIBE命令在每次成功订阅一个频道之后,都会向执行命令的客户端返回一条订阅消息
; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。...订阅连接用于订阅指定的频道,从而发现 监视同一主服务器的其他 Sentinel。 发现并连接从服务器 Sentinel 通过向主服务器发送 INFO 命令来自动获得所有从服务器的地址。...image.png 发现其他 Sentinel Sentinel 会通过命令连接向被监视的主从服务器发送 “HELLO” 信息,该消息包含Sentinel 的 IP、端口号、ID 等内容,以此来向其他...选出一个从服务器,并将它升级为主服务器。 5. 向被选中的从服务器发送 SLAVEOF NO ONE 命令,让它转变为主服务器。 6....向已下线主服务器的从服务器发送 SLAVEOF 命令,让它们去复制新的主服务器。 8. 当所有从服务器都已经开始复制新的主服务器时, leader Sentinel 终止这次故障迁移操作。
在一主多从的Redis系统中,可以使用多个哨兵进行监控任务以保证系统的问题。 ? 实现哨兵模式 1.配置一主两从 主服务器端口号6379,两个从服务器端口分别为:6380和6381....和主数据库连接建立完成后,哨兵会使用连接2发送如下命令: 每10秒钟哨兵会向主数据库和从数据库发送INFO 命令 每2秒钟哨兵会向主数据库和从数据的_sentinel_:hello频道发送自己的消息。...接下来哨兵向主从数据库的_sentinel_:hello 频道发送信息来与同样监控该数据库的哨兵分享自己的信息。...哨兵通过监听的_sentinel_:hello频道接收到其他哨兵发送的消息后会判断哨兵是不是新发现的哨兵,如果是则将其加入已发现的哨兵列表中并创建一个到其的连接(哨兵与哨兵只会创建用来发送PING命令的连接...优先级通过replica-priority参数设置 2 优先级相同,则复制的命令偏移量越大(复制越完整)越优先 3 如果以上都一样,则选择运行ID较小的从数据库 选出一个从数据库后,领头哨兵将向从数据库发送
消息队列 一、消息模型 点对点 消息生产者向消息队列中发送了一个消息之后,只能被一个消费者消费一次。 发布/订阅 消息生产者向频道发送一个消息之后,多个消费者可以从该频道订阅到这条消息并消费。...发布与订阅模式和观察者模式有以下不同: 观察者模式中,观察者和主题都知道对方的存在;而在发布与订阅模式中,生产者与消费者不知道对方的存在,它们之间通过频道进行通信。...观察者模式是同步的,当事件触发时,主题会调用观察者的方法,然后等待方法返回;而发布与订阅模式是异步的,生产者向频道发送一个消息之后,就不需要关心消费者何时去订阅这个消息,可以立即返回。...流量削锋 在高并发的场景下,如果短时间有大量的请求到达会压垮服务器。 可以将请求发送到消息队列中,服务器按照其处理能力从消息队列中订阅消息进行处理。...通过使用消息队列,一个模块只需要向消息队列中发送消息,其它模块可以选择性地从消息队列中订阅消息从而完成调用。 三、可靠性 发送端的可靠性 发送端完成操作后一定能将消息成功发送到消息队列中。
一、消息模型点对点消息生产者向消息队列中发送了一个消息之后,只能被一个消费者消费一次。发布/订阅消息生产者向频道发送一个消息之后,多个消费者可以从该频道订阅到这条消息并消费。...发布与订阅模式和观察者模式有以下不同:观察者模式中,观察者和主题都知道对方的存在;而在发布与订阅模式中,生产者与消费者不知道对方的存在,它们之间通过频道进行通信。...观察者模式是同步的,当事件触发时,主题会调用观察者的方法,然后等待方法返回;而发布与订阅模式是异步的,生产者向频道发送一个消息之后,就不需要关心消费者何时去订阅这个消息,可以立即返回。...流量削锋在高并发的场景下,如果短时间有大量的请求到达会压垮服务器。可以将请求发送到消息队列中,服务器按照其处理能力从消息队列中订阅消息进行处理。...通过使用消息队列,一个模块只需要向消息队列中发送消息,其它模块可以选择性地从消息队列中订阅消息从而完成调用。三、可靠性发送端的可靠性发送端完成操作后一定能将消息成功发送到消息队列中。
(发送信息的客户端)不是将信息直接发送给特定的接收者(接收信息的客户端), 而是将信息发送给频道(channel), 然后由频道将信息转发给所有对这个频道感兴趣的订阅者。...发送者无须知道任何关于订阅者的信息, 而订阅者也无须知道是那个客户端给它发送信息, 它只要关注自己感兴趣的频道即可。...提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。...; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。...支持模式匹配,能够实时订阅与取消频道。一些可靠性要求没那么高的事件订阅与发布是可以用Redis的Pub/Sub代替MQ方案的。 队列 现代的互联网应用大量地使用了消息队列(Messaging)。
广播是指发送方发送一条消息,订阅频道的各个接收方都能及时收到消息;比如 A同学写了一篇文章,这时候 B同学在文章底下评论了,A同学在页面上是不用刷新就能收到提示有文章被评论了,这个本质上就是A同学收到了广播消息...,这个广播消息是由B同学评论这个动作触发了发送广播消息; 在整个广播行为中,有一个重要的概念叫频道channel,频道的类型有 公共频道public 私有频道private 存在频道presence 移动端订阅了公共频道...public,会直接提示成功;私有频道private和存在频道presence在进行订阅的过程中,会向服务器端发送权限验证,看是不是有权限可以订阅该频道;私有频道private和存在频道presence...(data) { alert(data); }); 如果订阅的是公共频道,则不会向服务器端请求权限检查;如果是私有频道(频道名是以private-开头)或存在频道(频道名是以presence...事件使用IlluminateBroadcastingInteractsWithSockets trait; 前端发送过来的请求头部要携带X-Socket-ID信息; 事件触发执行broadcast(new
领取专属 10元无门槛券
手把手带您无忧上云