前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在EasyCVR中实现NSQ延时推流技术?

如何在EasyCVR中实现NSQ延时推流技术?

原创
作者头像
TSINGSEE青犀视频
修改2021-11-18 17:31:32
5120
修改2021-11-18 17:31:32
举报
文章被收录于专栏:TSINGSEE青犀视频TSINGSEE青犀视频

EasyCVR 是TSINGSEE青犀视频开发的高稳定、高接入性的视频平台,可接入的协议丰富,且可通过国标协议级联。EasyCVR 各模块之间进行消息通信时,需要一款消息中间件进行消息的传输和发送。在调研各种 MQ 中间件后,确定采用 NSQ 来进行编译。

EasyCVR 使用 NSQ 时,希望延时 60s,消费端才能够收到对应的消息,因此我们本文主要是调研是否有该功能的过程,我们主要使用 DeferredPublish 方法实现,方法代码如下:

代码语言:javascript
复制
package main

import (
   "fmt"
   "github.com/nsqio/go-nsq"
   "log"
   "time"
   "zhangqiadams.com/gotools/model/consts"
)

func main() {
   config := nsq.NewConfig()
   // 1. 向 nsqd 的 tcp 端口发送消息,因此进行对应的配置
   producer, err := nsq.NewProducer("127.0.0.1:4154", config)
   if err != nil {
      log.Fatal(err)
   }

   messageBody := []byte("hello world delay")
   topicName := "topic2"

   // 2. 同步推流到 nspd, 同步推流代表等待 nspd 的响应,如果发送失败返回错误。
   // PublishAsync 代表是异步推送消息给 nspd,发送完消息后立刻返回
   err = producer.DeferredPublish(topicName, 60*time.Second, messageBody)
   fmt.Println("发送消息时间为", time.Now().Format(consts.TimeFormat))
   if err != nil {
      log.Fatal(err)
   }

   /*sigChan := make(chan os.Signal, 1)
   signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
   <-sigChan*/

   // 3. 停止生产者,一般在停止服务,停止进程的时候需要调用
   producer.Stop()
}

在 14:06:45 开始发送了一个消息。

消费者在 60s 后收到消息,14:07:46 收到对应的消息。

经过代码确认,延时消息的发送是在 nsqd 中进行实现的,延时推流功能已经实现。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档