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

教程 shanhuhai 17332℃ 4评论

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

转载请注明:大后端 » lua 通过 stomp协议发送消息到 rabbitmq

付费咨询
喜欢 (5)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(4)个小伙伴在吐槽
  1. 你好,我将rabbitmq的属性填入,但是 err总是返回closed
    allen2018-12-13 10:49 回复
  2. rabbitmq有很多模式,这个库好像只有pub/sub?????
    goer2018-01-29 11:34 回复
    • 恩,我只用了订阅发布,其他的你再试试吧
      shanhuhai2018-02-18 13:31 回复