docker 安装 nsq

news2024/11/15 17:41:25

一. nsq介绍

nsq介绍

NSQ是一个基于Go语言,由bitly公司开源出来的一款简单易用的消息中间件。 官方和第三方开发了众多客户端功能库,如基于HTTP的nsqd、Go客户端go-nsq、Python客户端pynsq、基于Node.js的JavaScript客户端nsqjs、异步C客户端libnsq、Java客户端nsq-java等。

特点

支持分布式部署,去中心化,可以避免单点故障,能够具有高容错和HA(高可用)特性。
NSQ支持水平扩展,内置的发现服务简化了在集群中增加节点。
依赖少,非常容易配置和部署,自带一个管理界面。
消息可以不持久化,全在内存,宕机消息会丢失。也可配置–mem-queue-size来超出阈值的消息写到硬盘。没有内建的备份机制即使写入硬盘,硬盘坏了数据就丢了。
保证at least once投递。nsqd没挂的前提下,由于超时,连接断开,重新入队等原因,消息可能多次投递,client自己保证消费消息的操作是具有幂等性的。
nsq消息不保证有序

基本概念

Topic : 一个topic就是程序发布消息的一个逻辑键,当程序第一次发布消息时就会创建topic。


Channels : channel与消费者相关,是消费者之间的负载均衡,channel在某种意义上来说是一个“队列”。每当一个发布者发送一条消息到一个topic,消息会被复制到所有消费者连接的channel上,消费者通过这个特殊的channel读取消息,实际上,在消费者第一次订阅时就会创建channel。Channel会将消息进行排列,如果没有消费者读取消息,消息首先会在内存中排队,当量太大时就会被保存到磁盘中。

producer / consumer 消息的生产与发送者,这是用户功能具体实现的地方。每当一个消息由生产者发送到整个 NSQ 网络中,会有一个对应 consumer 负责与 NSQ 通信并处理这个消息。


Messages: 消息构成了我们数据流的中坚力量,消费者可以选择结束消息,表明它们正在被正常处理,或者重新将他们排队待到后面再进行处理。每个消息包含传递尝试的次数,当消息传递超过一定的阀值次数时,我们应该放弃这些消息,或者作为额外消息进行处理。


nsqd: nsqd 是一个守护进程,负责接收,排队,投递消息给客户端。它可以独立运行,不过通常它是由 nsqlookupd 实例所在集群配置的(它在这能声明 topics 和 channels,以便大家能找到)。


nsqlookupd: nsqlookupd 是守护进程负责管理拓扑信息。客户端通过查询 nsqlookupd 来发现指定话题(topic)的生产者,并且 nsqd 节点广播话题(topic)和通道(channel)信息。有两个接口:TCP 接口,nsqd 用它来广播。HTTP 接口,客户端用它来发现和管理。注:是消费者查询去哪里取消息,而不是生产者查询生产消息到哪里去
每个nsqd具有与nsqlookupd的长期TCP连接,在该连接上它定期推送其状态。此数据用于通知nsqlookupd将为消费者提供哪些nsqd地址。对于消费者,将公开HTTP /查找端点以进行轮询。
对于nsqlookupd,通过运行多个实例来实现高可用性。它们不直接相互通信,数据被认为最终是一致的。消费者轮询所有已配置的nsqlookupd实例并将响应联合起来。陈旧,不可访问或其他故障节点不会使系统停止运行。

nsqadmin: nsqadmin 是一套 WEB UI,用来汇集集群的实时统计,并执行不同的管理任务。

工具组件

nsq_to_file: 消费指定的话题(topic)/通道(channel),并写到文件中,有选择的滚动和/或压缩文件。
nsq_to_http: 消费指定的话题(topic)/通道(channel)和执行 HTTP requests (GET/POST) 到指定的端点。
nsq_to_nsq: 消费者指定的话题/通道 通过 TCP 重发布消息到目的地 nsqd 。
nsq_stat: 轮询 指定主题/频道的所有生产者并显示汇总统计信息
nsq_tail: 消费指定的主题/通道并写入标准输出 就是打印出来
to_nsq: 通过标准输入(命令行),发送nsq消息 到 topic/channel

官方建议部署架构图
官方推荐将nsqd实例同消息发布者部署在一起。

在这里插入图片描述

 

二. nsq docker 部署

拉取官方镜像

docker pull nsqio/nsq

Using default tag: latest
latest: Pulling from nsqio/nsq
29291e31a76a: Pull complete
b44c125007f5: Pull complete
78faf4072458: Pull complete
a12f7a4c50c9: Pull complete
9c80996c86b5: Pull complete
Digest: sha256:9e10df8ff8cd60f99f5eefebcd5e913b9e1ea3d76767894e6c7bb8fc725b73b2
Status: Downloaded newer image for nsqio/nsq:latest
docker.io/nsqio/nsq:latest

nsq 主要有三个组件: nsqlookupd, nsqd, nsqadmin。这三个组件都包含在 nsqio/nsq 镜像中, 每一个组件都可以通过指定组件名的方式去启动,启动命令的形式如下:
docker run nsqio/nsq /command

拉取基础镜像 docker pull nsqio/nsq

部署nsqlookupd

docker run --name lookupd -p 4160:4160 -p 4161:4161 -d nsqio/nsq /nsqlookupd

docker ps
CONTAINER ID   IMAGE       COMMAND         CREATED          STATUS          PORTS                                                            NAMES
bbf48d2583a1   nsqio/nsq   "/nsqlookupd"   39 seconds ago   Up 38 seconds   4150-4151/tcp, 4170-4171/tcp, 0.0.0.0:4160-4161->4160-4161/tcp   nsqlookupd

说明:

  • -p 是映射端口
  • -d 是后台运行容器
  • /nsqlookupd 就是启动命令

部署nsqd

首先通过ifconfig获取本机的ip地址

ifconfig

本机为192.168.1.39

nsq docker启动

docker run --name nsqd -p 4150:4150 -p 4151:4151 -d nsqio/nsq /nsqd --broadcast-address=192.168.1.39 --lookupd-tcp-address=192.168.1.39:4160 --data-path=/data

docker ps
CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS          PORTS                                                            NAMES
41eba4855824   nsqio/nsq   "/nsqd --broadcast-a…"   7 seconds ago    Up 6 seconds    4160-4161/tcp, 0.0.0.0:4150-4151->4150-4151/tcp, 4170-4171/tcp   nsqd
bbf48d2583a1   nsqio/nsq   "/nsqlookupd"             10 minutes ago   Up 10 minutes   4150-4151/tcp, 4170-4171/tcp, 0.0.0.0:4160-4161->4160-4161/tcp   nsqlookupd

持久化保存 nsqd 数据 使用/data 参数:
--data-path=/data

部署nsqadmin

docker run -d --name nsqadmin -p 4171:4171 nsqio/nsq /nsqadmin --lookupd-http-address=192.168.1.39:4161

访问 http://192.168.1.39:4161 就可以查看 nsq系统详情了

http接口
提供了 各种http接口供调用,详情参考官网,这里仅做个别测试
/nodes :显示集群节点信息
/info :显示版本信息
/ping :验证服务状态
/topics:显示所有的topic
/channel/create:创建channel
/channel/delete:删除channel
/topic/create:创建topic
/topic/delete:删除topic
/lookup :查找指定topic 的生产者

http://192.168.1.39:4161/nodes

访问http://192.168.1.39:4171 可以访问nsqadmin 的首页

 三. 创建topic

curl -d 'hello world ' 'http://127.0.0.1:4151/pub?topic=test'

发送一个内容是hello world 的消息到test topic中

调用http://192.168.1.39:4161/topics

{"topics":["test","test1"]}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/623857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaSE-02【类型转换和运算符】

第一章:数据类型转换 Java程序中要求参与计算的数据,必须要保证数据类型的一致, 如果数据类型不一致则发生类型的转换1.1 自动转换 自动转换:将取值范围小的类型自动提升为取回范围大的类型 自动类型转换原理:一个i…

MySql锁知识记录积累(一)

1.关于脏读、幻读和不可重复读 脏读:一个事务A读取到了另一个事务B未提交的数据,叫做脏读 不可重复读:事务A被事务B干扰到了!在事务A范围内,两个相同的查询,读取同一条记录,却反返回了不同的结…

运行一个新vue项目踩坑

npm install报错了,主要是因为node版本太高了。去node官网,下载低版本的msi后缀的文件,运行安装。在vs code里,npm下载依赖,并运行即可。 1. 无法cnpm cnpm : 无法加载文件 D:\Program Files\nodejs\node_global\cnpm.…

前端放大镜效果实现

放大镜效果实现 放大图片的需求,一般是在原有的渲染之上,额外添加一个放大框,当鼠标在原图上移动,放大框内就以当前的鼠标为中心,局部放大一定范围,在淘宝商城中是常有的实现。下面将用两种实现。 1、使用d…

是德 DSOX1202A示波器技术参数

KEYSIGHT是德科技 lnfiniiVision 1000 X 系列示波器是具有专业级功能的入门级示波器,配备的联网软件可提供远程控制和数据记录等功能。 它集 6 种仪器的功能于一身,属于是德科技智能测试台必备仪器之一。该系列包含 4 款独具特长的仪器,通过同…

5年功能测试要18K,一问三不知,还反过来怼我,真是醉了····

最近看了很多简历,很多候选人年限不小,但是做的都是一些非常传统的项目,想着也不能通过简历就直接否定一个人,何况现在大环境越来 越难,大家找工作也不容易,于是就打算见一见。 在沟通中发现,由…

坚持#第418天~久违了,二维码系统

公司有了一个新客户,这家客户的货物都是用铁架框装的,铁架框长得都一样,不好区分,只能看标签来识别,而且发货时需要一一核对发货单上的交货单号对应的货物,标签上的发货单号必须要一致才行,导致…

【干货】Kali Linux渗透基础知识大全,零基础入门必看!

最近好多朋友问我:不会编程,英语也不好,dos命令也记不住,能学习黑客技术么? 我可以明确告诉大家,可以的! 相信每一个少年心中,曾经都有过一个黑客梦! 有人觉得黑客霸气…

常用的开源自定义表单有哪几大优势特点?

当前,办公已经进入流程化和自动化的阶段,要想跟随着社会发展,引用开源自定义表单工具可以使办公协作效率得到快速提升,它的灵活、便捷、易操作等特点,使得该表单工具深受当今职场的喜爱,是做好数据管理&…

Flutter 库:强大的下拉刷新上拉加载框架——EasyRefresh

Flutter 库:强大的下拉刷新上拉加载框架——EasyRefresh 文章目录 Flutter 库:强大的下拉刷新上拉加载框架——EasyRefresh一、概述1、简介2、特征3、在线演示4、APK下载5、接口参考 二、官方示例1、默认构造函数2、生成器构造函数3、指示器定位4、使用指…

2023年网络安全HW攻防技术总结(珍藏版)

2022年护网正当时,相信不少网安人都已经进入了状态。 我们都知道, 护网行动 是国家应对网络安全问题所做的重要布局之一。至今已经是7个年头了,很多公司在这时候人手不够,因此不得不招募一些网安人员来参加护网。 红队 扮演攻击…

Linux搭建Java环境——安装JDK

一、上传jdk1.8文件 首先通过Xftp 7软件,将jdk文件传输到Linux上(连接和Xshell 7方法相同,软件资源在首页中的下载栏处免费获取)当然需要在opt文件夹下先新建jdk的文件夹 二、解压jdk文件 解压完成后可以发现蓝色的jdk1.8的目录生…

Android Studio实现五子棋小游戏

项目目录 一、项目概述二、开发环境三、详细设计1、布局设计2、验证码3、AI人机4、背景音乐 四、运行演示五、项目总结 一、项目概述 五子棋是一种两人对弈的策略型棋类游戏,本次五子棋小游戏具有人机对战和人人对战两种玩法。人机对战可以单人挑战AI,实…

SQL语言的规则与规范

SQL语言的规则与规范 前言一、SQL概述1、SQL背景知识2、SQL语言排行榜3、SQL 分类 二、SQL语言的规则与规范1、基本规则2、SQL大小写规范 (建议遵守)3、注 释4、命名规则(暂时了解)5、数据导入指令 前言 本博主将用CSDN记录软件开…

怎么用pe系统重装系统,如何用pe重装系统

其实,电脑装系统并没有这么难,尤其是u盘pe系统相对来说比较简单一点。但是,现在还有很多朋友一直在问这个是怎么装系统的,关键是装系统耗的时间比较长,步骤好像很复杂的样子,担心自己操作出现失误。确实&am…

Ansys Zemax | 如何以数据的方式定义网格矢高表面

引言 本文示范了如何输入表面起伏数据,以定义Zemax OpticStudio中的网格矢高 (Grid Sag) 类型表面,表面起伏数据应为Z坐标轴上的矢高 (Sag)。(联系我们获取文章附件) 正文 表面起伏数据格式是这样定义的: 第一行,由7个数字表示。 …

ASEMI代理英飞凌TDK5100F射频模块的性能与应用分析

编辑-Z 本文将对TDK5100F射频模块进行详细的介绍与分析,包括其性能特点、应用领域、使用方法。通过对这三个方面的阐述,希望能够帮助读者更好地了解TDK5100F射频模块的优势和应用场景。 1、TDK5100F射频模块的性能特点 TDK5100F射频模块是一款高性能的…

IPV6地址基础

IPv6是英文“Internet Protocol Version 6”(互联网协议第6版)的缩写,是互联网工程任务组(IETF)设计的用于替代IPv4的下一代IP协议。其地址数量号称可以为全世界的每一粒沙子编上一个地址 1. ipv6地址表示方法 IPv6的…

【前端播放器】前端播放器的时延问题小总结

目录 结论 播放器的优化测试与小结论 结论 根据理论知识,及代码查看,实验后 【ZLM】ZLM源码阅读三----延时问题_dualven_in_csdn的博客-CSDN博客 发现,结论大概与文中相同 :主要的延时,主要是播放器端形成的。 播放…

科技数据分析,2022年授权通过的专利数高达近80万项

哈喽大家好,中国科技发展在近年来取得了巨大进步,相关部门也积极推动科技创新,加大科技投入,鼓励企业加强研发,加速科技成果转化落地。此外,中国还在国际科技合作方面取得了积极进展,与各国合作…