Nginx 는 LUA 스 크 립 트 를 통 해 RabbitMQ 메시지 큐 에 접근 합 니 다.

2682 단어 rabbitmqStomp
Nginx 의 LUA 스 크 립 트 를 발 견 했 습 니 다: lua - resty - rabbitmqstomp, Nginx 가 LUA 스 크 립 트 를 통 해 RabbitMQ 메시지 큐 에 접근 할 수 있 도록 합 니 다. 이 스 크 립 트 는 stomp 프로 토 콜 을 통 해 RabbitMQ 의 stomp 어댑터 를 연결 하여 pub / sub 메 시 지 를 보 냅 니 다.
RabbitMQ - STOMP 설치 사용 에 관 한 내용 은 다음 과 같 습 니 다. RabbitMQ STOMP Adapter
Nginx - LUA 모듈 설치 에 대한 참조: LAMP 구조 가 LAMPGC 로 진입 하고 LNMLGC 로 진입
STOMP 프로 토 콜 관련 자 료 는 다음 과 같 습 니 다.
STOMP 공식 영문 프로 토 콜 1.1 버 전
STOMP 프로 토 콜 학습 및 실전 - 1.1 버 전
STOMP 공식 영문 프로 토 콜 1.2 판
STOMP 프로 토 콜 설명서 - 1.2 버 전
nginx 설정:
        location /rabbitmq {
            lua_code_cache off;
            content_by_lua_file conf/rabbitmq.lua;
        }

rabbitmq. lua 소스 코드 는 다음 과 같 습 니 다. 이 스 크 립 트 는 pub 메 시 지 를 간단하게 실현 한 다음 sub 메시지, settimeout (60000) 은 sub 메시지 가 없 을 때 60S 초과 대기
local strlen =  string.len
local json = require "json"
local rabbitmq = require "rabbitmqstomp"

local mq, err = rabbitmq:new()
if not mq then
      return
end

mq:set_timeout(60000)

local ok, err = mq:connect {
                    host = "127.0.0.1",
                    port = 61613,
                    username = "guest",
                    password = "guest",
                    vhost = "/"
                }
if not ok then
    return
end
ngx.log(ngx.INFO, "Connect: " .. "OK")

local msg = {key="value1", key2="value2"}
local headers = {}
headers["destination"] = "/queue/my_queue"
headers["receipt"] = "msg#1"
headers["app-id"] = "luaresty"
headers["persistent"] = "true"
headers["content-type"] = "application/json"

local ok, err = mq:send(json.encode(msg), headers)
if not ok then
    return
end
ngx.log(ngx.INFO, "Published: " .. json.encode(msg))

local headers = {}
headers["destination"] = "/queue/my_queue"
headers["persistent"] = "true"
headers["id"] = "123"

local ok, err = mq:subscribe(headers)
if not ok then
    return
end

local data, err = mq:receive()
if not data then
    return
end
ngx.log(ngx.INFO, "Consumed: " .. data)
ngx.header.content_type = "text/plain";
ngx.say(data);

local headers = {}
headers["persistent"] = "true"
headers["id"] = "123"

local ok, err = mq:unsubscribe(headers)

local ok, err = mq:set_keepalive(10000, 10000)
if not ok then
    return
end

구체 적 으로 확장 하면 푸 시 기능 을 실현 할 수 있 습 니 다. 발송 자 는 send 를 호출 하여 메 시 지 를 RabbitMQ 로 보 내 고 수신 자 는 시간 초과 호출 subscribe 구독 메 시 지 를 설정 합 니 다 (long polling 과 유사).

좋은 웹페이지 즐겨찾기