lua 发送消息到 Rabbitmq

教程 shanhuhai 161℃ 0评论

lua 发送消息到 kakfka 的类库挺多的,还都比较靠谱,但是 lua 连接 Rabbitmq 的几个类库好像都不太好用, 有用stomp 协议的, 还有 用AMQP 协议的,由于我的服务器上已经安装了 rabbitmq-c , 它基本上就是一组实现了 AMQP 协议的 C 类库, lua 能通过跨语言调用,调用这些 C 类库的API, 而跨语言调用是 lua 的强项。

找到了一个类库 amqp.lua
使用非常简单,使用了 luajit提供的 ffi 库来调用 C 类库。

安装

首先服务器上的 nginx 要安装 lua-nginx-module 或者 openresty,然后要安装 rabbitmq-c,可以参考 PHP 安装 AMQP扩展 中有详细的安装方法。

查找你的 nginx.conf 配置, 找到 lua_package_path,即 lua 的类库安装目录(openresty), 一般类似:

lua_package_path "/usr/local/nginx/conf/lua/?.lua;;"

下载 amqp 类库:

cd  /usr/local/nginx/conf/lua/
mkdir -p amqp
cd amqp
curl -O https://raw.githubusercontent.com/cthulhuology/amqp.lua/public/amqp.lua

找一个虚拟主机配置,例如localhostserver 块,添加:

    location = /queue {
      content_by_lua " 
            local data = { 
                ['name'] = 'shanhuhai',
                ['gender'] = '1' 
            }   
            local amqp = require 'amqp/amqp'
            local cjson = require 'cjson'
            amqp.connect('amqp://admin:admin@127.0.0.1:5672/')
            amqp.send('ex1', 'key_1', cjson.encode(data))
            amqp.disconnect()
      ";  
         add_header  Content-Type 'text/html; charset=utf-8';
    }  

测试

访问 http://localhost/queue,即可测试, 测试前确认交换机 队列 、 routingKey 是否已经设置好。

2017.12.7 更新

本文中使用的类库,由于没有连接复用机制,经测试性能较差,推荐使用另一种方式来发送消息到 rabbitmq 中,参考

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

转载请注明:大后端 » lua 发送消息到 Rabbitmq

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

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

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址