介绍

使用golang连接activemq发送数据的话,需要使用一个叫做stomp的包,直接go get github.com/go-stomp/stomp即可

代码

生产者

package main

import (
"fmt"
"github.com/go-stomp/stomp"
"time"
) func main(){
// 调用Dial方法,第一个参数是"tcp",第二个参数则是ip:port
// 返回conn(连接)和err(错误)
conn,err:=stomp.Dial("tcp", "47.adsasaads89:61613")
// 错误判断
if err!=nil{
fmt.Println("err =", err)
return
}
//发送十条数据
for i:=0;i<10;i++ {
// 调用conn下的send方法,接收三个参数
//参数一:队列的名字
//参数二:数据类型,一般是文本类型,直接写text/plain即可
//参数三:内容,记住要转化成byte数组的格式
//返回一个error
err := conn.Send("testQ", "text/plain",[]byte(fmt.Sprintf("message:%d", i)))
if err!=nil{
fmt.Println("err =", err)
}
}
/*
这里为什么要sleep一下,那就是conn.Send这个过程是不阻塞的
相当于Send把数据放到了一个channel里面
另一个goroutine从channel里面去取数据再放到消息队列里面
但是还没等到另一个goroutine放入数据,此时循环已经结束了
因此最好要sleep一下,根据测试,如果不sleep,那么发送1000条数据,
最终进入队列的大概是980条数据,这说明了什么
说明了当程序把1000条数据放到channel里面的时候,另一个goroutine只往队列里面放了980条
剩余的20条还没有来得及放入,程序就结束了
*/
time.Sleep(time.Second * 1)
}

消费者

package main

import (
"fmt"
"github.com/go-stomp/stomp"
"time"
) func recv_data(ch chan *stomp.Message) {
//不断地循环,从channel里面获取数据
for {
v := <-ch
//这里是打印当然还可以做其他的操作,比如写入hdfs平台
//v是*stomp.Message类型,属性都在这里面 /*
type Message struct {
// Indicates whether an error was received on the subscription.
// The error will contain details of the error. If the server
// sent an ERROR frame, then the Body, ContentType and Header fields
// will be populated according to the contents of the ERROR frame.
Err error // Destination the message has been sent to.
Destination string // MIME content type.
ContentType string // MIME content // Connection that the message was received on.
Conn *Conn // Subscription associated with the message.
Subscription *Subscription // Optional header entries. When received from the server,
// these are the header entries received with the message.
Header *frame.Header // The ContentType indicates the format of this body.
Body []byte // Content of message
}
*/
fmt.Println(string(v.Body))
}
} func main() {
//创建一个channel,存放的是*stomp.Message类型
ch := make(chan *stomp.Message)
//将管道传入函数中
go recv_data(ch)
//和生产者一样,调用Dial方法,返回conn和err
conn, err := stomp.Dial("tcp", "47.dsdsadsa9:61613")
if err != nil {
fmt.Println("err =", err)
}
//消费者订阅这个队列
//参数一:队列名
//参数二:确认信息,直接填默认地即可
sub, err := conn.Subscribe("testQ", stomp.AckMode(stomp.AckAuto))
for { //无限循环
select {
//sub.C是一个channel,如果订阅的队列有数据就读取
case v := <-sub.C:
//读取的数据是一个*stomp.Message类型
ch <- v
//如果30秒还没有人发数据的话,就结束
case <-time.After(time.Second * 30):
return
}
}
}
message:0
message:1
message:2
message:3
message:4
message:5
message:6
message:7
message:8
message:9

golang连接activemq,发送接收数据的更多相关文章

  1. 安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制

    安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制 socket 连接采用流的方式进行发送接收数据,采用thread线程的方式. 什么是线程?  详细代码介 ...

  2. Unary模式下客户端从开始连接到发送接收数据的主要流程

    (原创)C/C/1.25.0-dev grpc-c/8.0.0, 使用的例子是自带的例子GreeterClient grpc Unary模式下客户端从开始连接到发送数据的主要流程 graph TD; ...

  3. 网络编程--使用TCP协议发送接收数据

    package com.zhangxueliang.tcp; import java.io.IOException; import java.io.OutputStream; import java. ...

  4. 网络编程--使用UDP发送接收数据

    package com.zhangxueliang.udp; import java.io.IOException; import java.net.DatagramPacket; import ja ...

  5. c# 串口发送接收数据

    /********************** 串口数据接收事件 *****************************/ private void SerialPort_DataReceived ...

  6. STM32 串口USART DMA方式发送接收数据

    硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 文章目录 头文件 USART3_DR的地址 DMA的通道 DMA的中断 USART接收回调函数 头 ...

  7. java 基于tcp客户端服务端发送接收数据

    客户端: package demo03; import java.io.IOException; import java.io.InputStream; import java.io.OutputSt ...

  8. socket 异步 发送 接收 数据

    Socket socketClints = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); / ...

  9. Golang 连接ActiveMQ

    使用ActiveMQ库:github.com/go-stomp/stomp 示例代码 package main import ( "net" "fmt" &qu ...

随机推荐

  1. Failed to install the following Android SDK packages as some licences have not been accepted.

    问题描述: 执行gradle tasks报错: gradle tasks > Configure project :app Exception /package.xml. Probably th ...

  2. 阶段3 3.SpringMVC·_06.异常处理及拦截器_2 SpringMVC异常处理之演示程序异常

    原来的index.jsp删除.新建一个 创建pages文件夹.再创建success.jsp页面 重新部署项目 把这个项目移除掉 加入新的项目 启动tomcat服务器 模拟异常 方法抛出异常给前端控制器 ...

  3. mongod 对指定数据库创建用户

    https://blog.51cto.com/wzlinux/2153062?source=dra 1.先在admin库中创建管理员用户与密码 [root@mbasic ~]# mongo Mongo ...

  4. 引入easyui的404问题

    直接在webapp创建css文件夹添加easyui 引入: <link rel="stylesheet" type="text/css" href=&qu ...

  5. thinkphp6.0 nginx 配置

    location / {     index index.php;     #如果文件不存在则尝试TP解析     if (!-e $request_filename) {        rewrit ...

  6. 分布式架构-Redis 从入门到精通 完整案例 附源码

    导读 篇幅较长,干货十足,阅读需要花点时间,全部手打出来的字,难免出现错别字,敬请谅解.珍惜原创,转载请注明出处,谢谢~! NoSql介绍与Redis介绍 什么是Redis? Redis是用C语言开发 ...

  7. 如何使用StarUML for Mac创建和修改元素

    StarUML for Mac是一款UML软件建模器,支持快速编辑中的许多缩写,一次创建元素和关系,如子类,支持接口等.如何使用StarUML for Mac创建和修改元素?下面我们来介绍一下. 如何 ...

  8. 大觅网02Day

    docker环境搭建:(注:请先完成上一次的环境搭建) A.部署环境(导入上次系统的时候修改虚拟机的内存) 1.安装系统自带版本Docker:apt-get install docker.io 2.查 ...

  9. Java 架构师 -- 必读书单

    “学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会. 个人认为看书有两点好处: 1.能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一本好书的价值远 ...

  10. [转帖]浪潮信息最大供应商英特尔(Intel):2018 年采购额 145.76 亿元

    浪潮信息最大供应商英特尔(Intel):2018 年采购额 145.76 亿元 https://t.cj.sina.com.cn/articles/view/3172142827/bd130eeb01 ...