首页 > 其他分享 >Golang使用nats

Golang使用nats

时间:2023-11-10 14:35:44浏览次数:27  
标签:aa nats nc Golang cc func 使用 Msg

nats自行安装

package main

import (
	"fmt"
	"github.com/nats-io/nats.go"
)

////nats-server 在管理 subject 的时候是通过’.’ 进行分割的,server 底层是使用 tree module 分层管理 subject. 此处有两个通配符*和>。
////*可以匹配以.分割的一切。如:
////nc.Subscribe("aa.*.cc", func(m *Msg) {}) 可以匹配 aa.11.cc、aa.zngw.cc,但不能匹配aa.11.zngw.cc
////> 需要放在通配符最后,匹配后面所有长度。如:
////nc.Subscribe("aa.>", func(m *Msg) {}),这个匹配所有 aa.开送的subject

func main() {
	// 连接Nats服务器
	nc, _ := nats.Connect("nats://127.0.0.1:4222")

	// 发布-订阅 模式,异步订阅 test1
	_, _ = nc.Subscribe("test1", func(m *nats.Msg) {
		fmt.Printf("订阅收到消息: %s\n", string(m.Data))
	})

	// 队列 模式,订阅 test2, 队列为queue, test2 发向所有队列,同一队列只有一个能收到消息
	_, _ = nc.QueueSubscribe("test2", "queue", func(msg *nats.Msg) {
		fmt.Printf("队列消息: %s\n", string(msg.Data))
	})

	// 请求-响应, 响应 test3 消息。
	_, _ = nc.Subscribe("test3", func(m *nats.Msg) {
		fmt.Printf(string(m.Data))
		_ = nc.Publish(m.Reply, []byte("fuck you tony!!!"))
	})

	// 持续发送不需要关闭
	//_ = nc.Drain()
	// 关闭连接
	defer nc.Close()

	// 阻止进程结束而收不到消息
	select {}
}

package main

import (
	"fmt"
	"github.com/nats-io/nats.go"
	"time"
)

//nats-server 在管理 subject 的时候是通过’.’ 进行分割的,server 底层是使用 tree module 分层管理 subject. 此处有两个通配符*和>。
//*可以匹配以.分割的一切。如:
//nc.Subscribe("aa.*.cc", func(m *Msg) {}) 可以匹配 aa.11.cc、aa.zngw.cc,但不能匹配aa.11.zngw.cc
//> 需要放在通配符最后,匹配后面所有长度。如:
//nc.Subscribe("aa.>", func(m *Msg) {}),这个匹配所有 aa.开送的subject

func main() {

	// 连接Nats服务器
	nc, _ := nats.Connect("nats://127.0.0.1:4222")

	// 发布-订阅 模式,向 test1 发布一个 `Hello World` 数据
	_ = nc.Publish("test1", []byte("Hello World"))

	// 队列 模式,发布是一样的,只是订阅不同,向 test2 发布一个 `Hello World` 数据
	_ = nc.Publish("test2", []byte("Hello World"))

	// 请求-响应, 向 test3 发布一个 `Hello World` 请求数据,设置超时间3秒,如果有多个响应,只接收第一个收到的消息
	msg, err := nc.Request("test3", []byte("Hello World"), 3*time.Second)
	if err != nil {
		fmt.Println(err)
	} else {
		fmt.Printf(string(msg.Data))
	}

	// 关闭连接
	defer nc.Close()
	select {}
}

标签:aa,nats,nc,Golang,cc,func,使用,Msg
From: https://www.cnblogs.com/qcy-blog/p/17824018.html

相关文章

  • Mybatis-Plus 使用隐患,太坑了!
    作者:糊涂码链接:https://juejin.cn/post/7156428078061895710前言MP从出现就一直有争议感觉一直都存在两种声音like:很方便啊通过函数自动拼接Sql不需要去XML再去使用标签之前一分钟写好的Sql现在一秒钟就能写好简直不要太方便dislike:侵入Service层不好维护可......
  • 视频直播系统源码,EditText输入框的使用
    视频直播系统源码,EditText输入框的使用为了良好的交互和用户体验,我们在做功能时需要对输入框又一些状态上的监听才能更好的把一些信息反馈给用户。比如登录时的,错误提示,选中时的颜色改变等等,常用的一些方法如下: 1.内容编辑的监听:当我们需要实时对内容进行监听:比如内容为空/格......
  • 使用sizeof()和strlen()去计算【数组】和【指针】的大小
    (目录)一、知识回顾1、回顾sizeof()、strlen的作用:sizeof()是用来求取变量或者类型所占内存空间的大小(单位:字节)。sizeof计算的是占用内存空间的大小,单位是字节,不关注内存中到底存放的是什么。sizeof不是函数,是操作符strlen()是一个库函数是专门用来计算字符串长度的,在......
  • 使用Python调用API接口获取拼多多商品数据:一篇详细说明文章
    一、引言拼多多是中国著名的电商平台之一,提供了丰富的商品信息和购物服务。为了更好地利用拼多多的数据资源,我们可以使用Python编程语言调用拼多多的API接口,获取商品数据并进行处理和分析。本文将详细介绍如何使用Python完成这一任务,包括API的基本概念、接口调用流程、代码实现和数......
  • C/C++字符的使用
    在C/C++中有字符和字符数组,分别对应char和char[]。其中字符数组也称字符串。查阅头文件stdint.h可以看到如下两句关键的语句:typedefsignedcharint8_t;typedefunsignedcharuint8_t;那么char对应的是哪一个?网上找不到确切说法,据说这个和编译器有关。经过实验表明......
  • 如何使用 RestTemplate 进行 Spring Boot 微服务通信示例
    概述下面我们将学习如何创建多个Springboot微服务以及如何使用RestTemplate类在多个微服务之间进行同步通信。微服务通信有两种风格:同步通讯异步通信同步通讯在同步通信的情况下,客户端发送请求并等待服务的响应。这里重要的一点是协议(HTTP/HTTPS)是同步的,客户端代码只......
  • 使用rancher rke快速安装k8s集群
    概述RancherKubernetesEngine(RKE)是一个用于部署、管理和运行Kubernetes集群的开源工具。旨在简化Kubernetes集群的部署和操作。RKE具有以下特点和功能:简化的部署过程RKE提供了一个简单的命令行界面,使您可以轻松地部署一个完整的Kubernetes集群。您只需提供少量的配置信息,RKE......
  • MPU6050使用心得(简单分享一下)
    前言选用MPU6050做倾斜检测功能。前期准备开发板:正点原子STM32F103精英版(STM32F103ZET6)模块:GY-521MPU6050其他:杜邦线若干、烧录线、FlyMcu、Keil5、正点原子开发板配套的套件(TFTLCD)例程、资料下载源自淘宝卖家:https://pan.baidu.com/share/init?surl=dNDqcp76L9QdM7iSZYfz_A密......
  • Electron学习2 使用Electron-vue和Vuetify UI库
    Electron学习2使用Electron-vue和VuetifyUI库一、Electron-vue简介二、安装yarn三、创建Electron-vue项目1.关于electron-builder2.安装脚手架3.运行4.打包应用程序四、background.js说明1.引入模块和依赖:2.注册协议:3.创建窗口函数:4.生命周期事件和监听器:五、使用UI库......
  • Electron学习3 使用serialport操作串口
    Electron学习3使用serialport操作串口一、准备工作二、SerialPort介绍1.核心软件包(1)serialport(2)@serialport/stream(3)@serialport/bindings-cpp(4)@serialport/binding-mock(5)@serialport/bindings-interface2.解析器包3.命令行工具三、创建一个demo程序1.创建......