ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

lua 通过 stomp协议发送消息到 rabbitmq

2022-02-17 21:02:46  阅读:194  来源: 互联网

标签:ok err stomp rabbitmq lua mq local


lua 发送消息到 rabbitmq, 我们选择类库lua-resty-rabbitmqstomp 来完成这个任务。

类库安装:

进入 nginx.conf 中 lua_package_path 中对应的目录下的resty 目录(没有则创建) , 执行:

wget -c https://raw.githubusercontent.com/wingify/lua-resty-rabbitmqstomp/master/lib/resty/rabbitmqstomp.lua

示例代码:

local rabbitmq = require "resty.rabbitmqstomp"
local cjson = require "cjson"

local opts = {
    host = '127.0.0.1',
    port = '5672',
    username = 'guest',
    password = 'guest',
    vhost = '/'
}

local mq, err = rabbitmq:new(opts)

if not mq then
    ngx.say('cannot new mq')
    ngx.say(err)
    return
end

mq:set_timeout(10000)

local ok, err = mq:connect(HOST, PORT)
if not ok then
    ngx.say('cannot connect mq' .. err)
    return
end

local headers = {}
-- 消息发送到哪里 /exchange/交换机名称/routing_key名称
headers["destination"] = "/exchange/ex1/ex1_key"
-- 是否持久化
headers["persistent"] = "true"
-- 消息格式
headers["content-type"] = "application/json"

local ok, err = mq:send(cjson.encode(data), headers)
if not ok then
    ngx.say('cannot send mq')
    return
end

-- 消息保持长连接,第一个参数表示连接超时时间,第二个参数是表示连接池大小
-- 由于 rabbitmq 连接建立比较耗时,所以保持连接池是非常必要的
local ok, err = mq:set_keepalive(10000, 500)
if not ok then
    ngx.say(err)
    return
end

注意: rabbitmq 的 stomp 协议支持默认是不开启的,测试前需要手动开启:

rabbitmq-plugins enable rabbitmq_stomp

另外与 lua 发送消息到 Rabbitmq 中使用 的类库比,本文使用的方式性能更高,单机性能测试达到了5000 qps

转自:http://www.dahouduan.com/2017/12/07/lua-stomp-rabbitmq/?_blank

标签:ok,err,stomp,rabbitmq,lua,mq,local
来源: https://www.cnblogs.com/shenyixin/p/15906359.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有