AMQ JavaScript 클라이언트 사용
AMQ Clients 2.11과 함께 사용
초록
보다 포괄적 수용을 위한 오픈 소스 용어 교체 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.
1장. 개요 링크 복사링크가 클립보드에 복사되었습니다!
AMQ JavaScript는 메시징 애플리케이션을 개발하기 위한 라이브러리입니다. 이를 통해 AMQP 메시지를 보내고 수신하는 JavaScript 애플리케이션을 작성할 수 있습니다.
AMQ JavaScript는 여러 언어 및 플랫폼을 지원하는 메시징 라이브러리 제품군인 AMQ Clients의 일부입니다. 클라이언트 개요는 AMQ Clients 개요 를 참조하십시오. 이 릴리스에 대한 자세한 내용은 AMQ Clients 2.11 릴리스 노트 를 참조하십시오.
AMQ JavaScript는 Rhea 메시징 라이브러리를 기반으로 합니다. 자세한 API 문서는 AMQ JavaScript API 참조를 참조하십시오.
1.1. 주요 기능 링크 복사링크가 클립보드에 복사되었습니다!
- 기존 애플리케이션과의 통합을 간소화하는 이벤트 중심 API
- 보안 통신을 위한 SSL/TLS
- 유연한 SASL 인증
- 자동 재연결 및 페일오버
- AMQP와 언어 네이티브 데이터 유형 간의 원활한 변환
- AMQP 1.0의 모든 기능 및 기능에 액세스
1.2. 지원되는 표준 및 프로토콜 링크 복사링크가 클립보드에 복사되었습니다!
AMQ JavaScript는 업계에서 인정하는 다음과 같은 표준 및 네트워크 프로토콜을 지원합니다.
- AMQP( Advanced Message Queueing Protocol ) 버전 1.0
- TLS( Transport Layer Security ) 프로토콜의 1.0, 1.1, 1.2 및 1.3 버전, SSL의 후속 버전
- SASL( Simple Authentication and Security Layer ) 메커니즘 ANONYMOUS, PLAIN 및 EXTERNAL
- IPv6를 사용하는 최신 TCP
1.3. 지원되는 구성 링크 복사링크가 클립보드에 복사되었습니다!
AMQ JavaScript 지원 구성에 대한 최신 정보는 Red Hat 고객 포털에서 Red Hat AMQ 지원 구성을 참조하십시오.
1.4. 용어 및 개념 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 핵심 API 엔티티를 소개하고 함께 작동하는 방법을 설명합니다.
| 엔터티 | 설명 |
|---|---|
| 컨테이너 | 최상위 연결 컨테이너입니다. |
| 연결 | 네트워크에서 두 피어 간 통신을 위한 채널입니다. 세션이 포함되어 있습니다. |
| 세션 | 메시지를 보내고 받기 위한 컨텍스트입니다. 보낸 사람 및 수신자가 포함되어 있습니다. |
| 보낸 사람 | 대상에 메시지를 전송하는 채널입니다. 대상도 있습니다. |
| 수신자 | 소스에서 메시지를 수신하는 채널입니다. 소스가 있습니다. |
| 소스 | 메시지의 이름이 지정된 원본 지점입니다. |
| 대상 | 메시지에 대해 이름이 지정된 대상입니다. |
| 메시지 | 애플리케이션별 정보. |
| delivery | 메시지 전송입니다. |
AMQ JavaScript는 메시지를 보내고 수신합니다. 보낸 사람 및 수신자 를 통해 연결된 피어 간에 메시지가 전송됩니다. 발신자와 수신자는 세션을 통해 설정됩니다. 세션은 연결을 통해 설정됩니다. 연결은 고유하게 식별된 두 컨테이너 간에 설정됩니다. 연결에는 여러 세션이 있을 수 있지만 종종 필요하지 않습니다. API를 사용하면 필요하지 않은 경우 세션을 무시할 수 있습니다.
전송 피어는 메시지를 보낼 보낸 사람을 만듭니다. 보낸 사람에는 원격 피어에서 큐 또는 주제를 식별하는 대상이 있습니다. 수신하는 피어는 메시지를 수신하기 위한 수신자를 생성합니다. 수신자에는 원격 피어에서 큐 또는 주제를 식별하는 소스가 있습니다.
메시지의 전송은 전달 이라고 합니다. 메시지는 헤더 및 주석과 같은 모든 메타데이터를 포함하여 전송된 내용입니다. 전송은 해당 콘텐츠의 전송과 관련된 프로토콜 교환입니다.
전송이 완료되었음을 나타내기 위해 송신자 또는 수신자가 이를 고정합니다. 다른 쪽이 정통되면 더 이상 그 전달에 대해 전달하지 않을 것입니다. 수신자는 메시지를 수락하거나 거부할지 여부를 나타낼 수도 있습니다.
1.5. 문서 규칙 링크 복사링크가 클립보드에 복사되었습니다!
sudo 명령
이 문서에서 sudo 는 root 권한이 필요한 모든 명령에 사용됩니다. 변경 사항이 전체 시스템에 영향을 줄 수 있으므로 sudo 를 사용할 때는 주의하십시오. sudo 에 대한 자세한 내용은 sudo 명령 사용을 참조하십시오.
파일 경로
이 문서에서 모든 파일 경로는 Linux, UNIX 및 유사한 운영 체제(예: /home/andrea)에 유효합니다. Microsoft Windows에서는 동등한 Windows 경로(예: C:\Users\andrea)를 사용해야 합니다.
변수 텍스트
이 문서에는 환경과 관련된 값으로 교체해야 하는 변수가 있는 코드 블록이 포함되어 있습니다. 변수 텍스트는 화살표 중괄호로 묶고 italic monospace로 스타일링됩니다. 예를 들어 다음 명령에서 < project-dir> 을 사용자 환경의 값으로 바꿉니다.
$ cd <project-dir>
2장. 설치 링크 복사링크가 클립보드에 복사되었습니다!
이 장에서는 환경에 AMQ JavaScript를 설치하는 단계를 안내합니다.
2.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
- AMQ 릴리스 파일 및 리포지토리에 액세스하려면 서브스크립션이 있어야 합니다.
-
환경에
npm명령줄 도구를 설치해야 합니다. 자세한 내용은 npm 웹 사이트를 참조하십시오. - AMQ JavaScript를 사용하려면 환경에 Node.js를 설치해야 합니다. 자세한 내용은 Node.js 웹 사이트를 참조하십시오.
-
AMQ JavaScript는 Node.js
디버그모듈에 따라 다릅니다. 설치 지침은 디버그 npm 페이지를 참조하십시오.
2.2. Red Hat NPM 레지스트리 사용 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat NPM 레지스트리에서 클라이언트 라이브러리를 다운로드하도록 NPM 환경을 구성합니다.
프로세스
npm config set명령을 사용하여 환경에 Red Hat NPM 레지스트리를 추가합니다.$ sudo npm config set @redhat:registry https://npm.registry.redhat.comnpm install명령을 사용하여 클라이언트를 설치합니다.$ sudo npm install -g @redhat/rhea@1.0.24-redhat-00004
위의 절차는 시스템 전체 설치를 위한 것입니다. sudo 없이 명령을 실행하고 -g 옵션 없이 실행하여 로컬 설치를 수행할 수 있습니다.
설치된 라이브러리를 사용하도록 환경을 구성하려면 node_modules/@redhat 디렉터리를 NODE_PATH 환경 변수에 추가합니다.
Red Hat Enterprise Linux 7
$ export NODE_PATH=/opt/rh/rh-nodejs14/root/usr/lib/node_modules/@redhat:$NODE_PATH
Red Hat Enterprise Linux 8
$ export NODE_PATH=/usr/local/lib/node_modules/@redhat:$NODE_PATH
Windows
$ set NODE_PATH=%AppData%\Roaming\npm\node_modules\@redhat;%NODE_PATH%
설치를 테스트하려면 다음 명령을 사용합니다. 설치된 라이브러리를 성공적으로 가져오는 경우 콘솔에 OK 를 출력합니다.
$ node -e 'require("rhea")' && echo OK
OK
2.3. 브라우저에 클라이언트 배포 링크 복사링크가 클립보드에 복사되었습니다!
AMQ JavaScript는 웹 브라우저 내에서 실행할 수 있습니다. NPM 패키지에는 브라우저 기반 애플리케이션에서 사용할 수 있는 다음 위치에 rhea.js 라는 파일이 포함되어 있습니다.
/usr/lib/node_modules/@redhat/rhea/dist/rhea.js
다음 예제와 같이 rhea.js 파일을 웹 서버에서 노출하는 위치에 복사하고 HTML < script > 요소를 사용하여 참조합니다.
예: 브라우저에서 클라이언트 실행
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
<script src="rhea.js"></script>
</head>
<body>
<script>
const rhea = require("rhea");
const container = rhea.create_container();
container.on("message", (event) => {
console.log(event.message.body);
});
const ws = container.websocket_connect(WebSocket);
const details = ws("ws://example.net:5673", ["binary", "AMQPWSB10", "amqp"])
const conn = container.connect({"connection_details": details});
conn.open_receiver("notifications");
</script>
</body>
3장. 시작하기 링크 복사링크가 클립보드에 복사되었습니다!
이 장에서는 환경을 설정하고 간단한 메시징 프로그램을 실행하는 단계를 안내합니다.
3.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
3.2. Red Hat Enterprise Linux에서 Hello World 실행 링크 복사링크가 클립보드에 복사되었습니다!
Hello World 예제에서는 브로커에 대한 연결을 생성하고 예제 큐에 인사말을 포함하는 메시지를 전송한 다음 다시 수신합니다. 성공하면 수신된 메시지를 콘솔에 출력합니다.
examples 디렉터리로 변경하고 helloworld.js 예제를 실행합니다.
$ cd <install-dir>/node_modules/rhea/examples
$ node helloworld.js
Hello World!
3.3. Microsoft Windows에서 Hello World 실행 링크 복사링크가 클립보드에 복사되었습니다!
Hello World 예제에서는 브로커에 대한 연결을 생성하고 예제 큐에 인사말을 포함하는 메시지를 전송한 다음 다시 수신합니다. 성공하면 수신된 메시지를 콘솔에 출력합니다.
examples 디렉터리로 변경하고 helloworld.js 예제를 실행합니다.
> cd <install-dir>/node_modules/rhea/examples
> node helloworld.js
Hello World!
4장. 예 링크 복사링크가 클립보드에 복사되었습니다!
이 장에서는 예제 프로그램을 통해 AMQ JavaScript를 사용하는 방법을 보여줍니다.
자세한 내용은 AMQ JavaScript 예제 모음 및 Rhea 예제 를 참조하십시오.
4.1. 메시지 전송 링크 복사링크가 클립보드에 복사되었습니다!
이 클라이언트 프로그램은 < connection-url >을 사용하여 서버에 연결하고, 대상 < address >에 대한 보낸 사람을 생성하고, < message-body >를 포함하는 메시지를 전송하고, 연결을 종료하고 종료합니다.
예: 메시지 전송
"use strict";
var rhea = require("rhea");
var url = require("url");
if (process.argv.length !== 5) {
console.error("Usage: send.js <connection-url> <address> <message-body>");
process.exit(1);
}
var conn_url = url.parse(process.argv[2]);
var address = process.argv[3];
var message_body = process.argv[4];
var container = rhea.create_container();
container.on("sender_open", function (event) {
console.log("SEND: Opened sender for target address '" +
event.sender.target.address + "'");
});
container.on("sendable", function (event) {
var message = {
body: message_body
};
event.sender.send(message);
console.log("SEND: Sent message '" + message.body + "'");
event.sender.close();
event.connection.close();
});
var opts = {
host: conn_url.hostname,
port: conn_url.port || 5672,
// To connect with a user and password:
// username: "<username>",
// password: "<password>",
};
var conn = container.connect(opts);
conn.open_sender(address);
예제 실행
예제 프로그램을 실행하려면 node 명령을 사용하여 로컬 파일에 복사하고 호출합니다. 자세한 내용은 3장. 시작하기의 내용을 참조하십시오.
$ node send.js amqp://localhost queue1 hello
4.2. 메시지 수신 링크 복사링크가 클립보드에 복사되었습니다!
이 클라이언트 프로그램은 < connection-url >을 사용하여 서버에 연결하고, 소스 < address > 에 대한 수신자를 생성하고, 종료되거나 < count > 메시지에 도달할 때까지 메시지를 수신합니다.
예: 메시지 수신
"use strict";
var rhea = require("rhea");
var url = require("url");
if (process.argv.length !== 4 && process.argv.length !== 5) {
console.error("Usage: receive.js <connection-url> <address> [<message-count>]");
process.exit(1);
}
var conn_url = url.parse(process.argv[2]);
var address = process.argv[3];
var desired = 0;
var received = 0;
if (process.argv.length === 5) {
desired = parseInt(process.argv[4]);
}
var container = rhea.create_container();
container.on("receiver_open", function (event) {
console.log("RECEIVE: Opened receiver for source address '" +
event.receiver.source.address + "'");
});
container.on("message", function (event) {
var message = event.message;
console.log("RECEIVE: Received message '" + message.body + "'");
received++;
if (received == desired) {
event.receiver.close();
event.connection.close();
}
});
var opts = {
host: conn_url.hostname,
port: conn_url.port || 5672,
// To connect with a user and password:
// username: "<username>",
// password: "<password>",
};
var conn = container.connect(opts);
conn.open_receiver(address);
예제 실행
예제 프로그램을 실행하려면 Python 명령을 사용하여 로컬 파일에 복사하여 호출합니다. 자세한 내용은 3장. 시작하기의 내용을 참조하십시오.
$ node receive.js amqp://localhost queue1
5장. API 사용 링크 복사링크가 클립보드에 복사되었습니다!
자세한 내용은 AMQ JavaScript API 참조 및 AMQ JavaScript 예제 제품군 을 참조하십시오.
5.1. 메시징 이벤트 처리 링크 복사링크가 클립보드에 복사되었습니다!
AMQ JavaScript는 비동기 이벤트 중심 API입니다. 애플리케이션에서 이벤트를 처리하는 방법을 정의하기 위해 사용자는 컨테이너 오브젝트에 이벤트 처리 기능을 등록합니다. 그런 다음 이러한 기능을 네트워크 활동 또는 타이머로 호출하여 새 이벤트를 트리거합니다.
예: 메시징 이벤트 처리
var rhea = require("rhea");
var container = rhea.create_container();
container.on("sendable", function (event) {
console.log("A message can be sent");
});
container.on("message", function (event) {
console.log("A message is received");
});
이는 몇 가지 일반적인 이벤트일 뿐입니다. 전체 세트는 AMQ JavaScript API 참조에 설명되어 있습니다.
5.3. 컨테이너 생성 링크 복사링크가 클립보드에 복사되었습니다!
컨테이너는 최상위 API 오브젝트입니다. 연결을 생성하는 진입점이며 기본 이벤트 루프를 실행합니다. 일반적으로 글로벌 이벤트 처리기로 구성됩니다.
예: 컨테이너 생성
var rhea = require("rhea");
var container = rhea.create_container();
5.4. 컨테이너 ID 설정 링크 복사링크가 클립보드에 복사되었습니다!
각 컨테이너 인스턴스에는 컨테이너 ID라는 고유한 ID가 있습니다. AMQ JavaScript가 네트워크 연결을 만들 때 컨테이너 ID를 원격 피어로 보냅니다. 컨테이너 ID를 설정하려면 id 옵션을 create_container 메서드에 전달합니다.
예: 컨테이너 ID 설정
var container = rhea.create_container({id: "job-processor-3"});
사용자가 ID를 설정하지 않으면 컨테이너가 구성될 때 라이브러리에서 UUID를 생성합니다.
6장. 네트워크 연결 링크 복사링크가 클립보드에 복사되었습니다!
6.1. 발신 연결 생성 링크 복사링크가 클립보드에 복사되었습니다!
원격 서버에 연결하려면 호스트와 포트가 포함된 연결 옵션을 container.connect() 메서드에 전달합니다.
예: 발신 연결 생성
container.on("connection_open", function (event) {
console.log("Connection " + event.connection + " is open");
});
var opts = {
host: "example.com",
port: 5672
};
container.connect(opts);
기본 호스트는 localhost 입니다. 기본 포트는 5672입니다.
보안 연결 생성에 대한 자세한 내용은 7장. 보안 입니다.
6.2. 다시 연결 구성 링크 복사링크가 클립보드에 복사되었습니다!
다시 연결을 사용하면 클라이언트가 손실된 연결을 복구할 수 있습니다. 분산 시스템의 구성 요소가 임시 네트워크 또는 구성 요소 실패 후 통신을 다시 설정하도록 하는 데 사용됩니다.
AMQ JavaScript는 기본적으로 다시 연결할 수 있습니다. 연결 시도가 실패하면 짧은 지연 후 클라이언트가 다시 시도합니다. 지연은 새 시도마다 기본 최대 60초까지 기하급수적으로 증가합니다.
다시 연결을 비활성화하려면 다시 연결 옵션을 false 로 설정합니다.
예: 다시 연결 해제
var opts = {
host: "example.com",
reconnect: false
};
container.connect(opts);
연결 시도 사이의 지연을 제어하려면 initial_reconnect_delay 및 max_reconnect_delay 연결 옵션을 설정합니다. 지연 옵션은 밀리초 단위로 지정됩니다.
다시 연결 시도 수를 제한하려면 reconnect_limit 옵션을 설정합니다.
예: 다시 연결 구성
var opts = {
host: "example.com",
initial_reconnect_delay: 100,
max_reconnect_delay: 60 * 1000,
reconnect_limit: 10
};
container.connect(opts);
6.3. 페일오버 구성 링크 복사링크가 클립보드에 복사되었습니다!
AMQ JavaScript를 사용하면 대체 연결 끝점을 프로그래밍 방식으로 구성할 수 있습니다.
여러 연결 끝점을 지정하려면 새 연결 옵션을 반환하는 함수를 정의하고 connection_details 옵션에 함수를 전달합니다. 이 함수는 각 연결 시도에 대해 한 번 호출됩니다.
예: 페일오버 구성
var hosts = ["alpha.example.com", "beta.example.com"];
var index = -1;
function failover_fn() {
index += 1;
if (index == hosts.length) index = 0;
return {host: hosts[index].hostname};
};
var opts = {
host: "example.com",
connection_details: failover_fn
}
container.connect(opts);
이 예제에서는 호스트 목록에 대해 라운드 로빈 장애 조치를 반복합니다. 이 인터페이스를 사용하여 고유한 페일오버 동작을 구현할 수 있습니다.
6.4. 들어오는 연결 허용 링크 복사링크가 클립보드에 복사되었습니다!
AMQ JavaScript는 인바운드 네트워크 연결을 수락하여 사용자 지정 메시징 서버를 빌드할 수 있습니다.
연결 수신을 시작하려면 수신 대기할 로컬 호스트 주소 및 포트가 포함된 옵션과 함께 container.listen() 메서드를 사용합니다.
예: 들어오는 연결 허용
container.on("connection_open", function (event) {
console.log("New incoming connection " + event.connection);
});
var opts = {
host: "0.0.0.0",
port: 5672
};
container.listen(opts);
특수 IP 주소 0.0.0.0 은 사용 가능한 모든 IPv4 인터페이스에서 수신 대기합니다. 모든 IPv6 인터페이스에서 수신 대기하려면 [::0] 을 사용합니다.
자세한 내용은 서버 receive.js 예제 를 참조하십시오.
7장. 보안 링크 복사링크가 클립보드에 복사되었습니다!
7.1. SSL/TLS를 사용한 연결 보안 링크 복사링크가 클립보드에 복사되었습니다!
AMQ JavaScript는 SSL/TLS를 사용하여 클라이언트와 서버 간의 통신을 암호화합니다.
SSL/TLS를 사용하여 원격 서버에 연결하려면 전송 연결 옵션을 tls 로 설정합니다.
예: SSL/TLS 활성화
var opts = {
host: "example.com",
port: 5671,
transport: "tls"
};
container.connect(opts);
기본적으로 클라이언트는 신뢰할 수 없는 인증서가 있는 서버에 대한 연결을 거부합니다. 이는 종종 테스트 환경에서의 경우입니다. 인증서 승인을 바이패스하려면 rejectUnauthorized 연결 옵션을 false 로 설정합니다. 이 경우 연결 보안이 손상됩니다.
7.2. 사용자 및 암호와 연결 링크 복사링크가 클립보드에 복사되었습니다!
AMQ JavaScript는 사용자 및 암호로 연결을 인증할 수 있습니다.
인증에 사용되는 인증 정보를 지정하려면 사용자 이름 및 암호 연결 옵션을 설정합니다.
예: 사용자 및 암호와 연결
var opts = {
host: "example.com",
username: "alice",
password: "secret"
};
container.connect(opts);
7.3. SASL 인증 구성 링크 복사링크가 클립보드에 복사되었습니다!
AMQ JavaScript는 SASL 프로토콜을 사용하여 인증을 수행합니다. SASL은 다양한 인증 메커니즘을 사용할 수 있습니다. 두 네트워크 피어가 연결되면 허용되는 메커니즘을 교환하고 둘 다 허용하는 가장 강력한 메커니즘을 선택합니다.
AMQ JavaScript는 사용자 및 암호 정보가 있는지에 따라 SASL 메커니즘을 활성화합니다. 사용자 및 암호가 모두 지정되면 PLAIN 이 사용됩니다. 사용자만 지정하면 ANONYMOUS 가 사용됩니다. 둘 다 지정하지 않으면 SASL이 비활성화됩니다.
8장. 보낸 사람 및 수신자 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트는 보낸 사람 및 수신자 링크를 사용하여 메시지를 전달하기 위한 채널을 나타냅니다. 보낸 사람 및 수신자는 단방향으로, 메시지 원본의 소스 끝과 메시지 대상에 대한 대상 끝을 사용합니다.
소스 및 대상은 종종 메시지 브로커의 대기열 또는 주제를 가리킵니다. 소스는 서브스크립션을 나타내는 데도 사용됩니다.
8.1. 필요에 따라 대기열 및 주제 생성 링크 복사링크가 클립보드에 복사되었습니다!
일부 메시지 서버는 온디맨드 대기열 및 주제 생성을 지원합니다. 발신자 또는 수신자가 연결되면 서버는 발신자 대상 주소 또는 수신자 소스 주소를 사용하여 주소와 일치하는 이름의 큐 또는 주제를 만듭니다.
일반적으로 메시지 서버는 기본적으로 큐(one-to-one 메시지 전달용) 또는 주제(일대다 메시지 전달용)를 생성합니다. 클라이언트는 소스 또는 대상에 대기열 또는 주제 기능을 설정하여 선호하는 항목을 나타낼 수 있습니다.
큐 또는 주제 의미 체계를 선택하려면 다음 단계를 따르십시오.
- 대기열 및 주제를 자동으로 생성하도록 메시지 서버를 구성합니다. 이는 종종 기본 구성입니다.
-
아래 예제와 같이 보낸 사람 대상 또는 수신자 소스의
대기열또는주제기능을 설정합니다.
예: 요청 시 생성된 큐로 전송
var conn = container.connect({host: "example.com"});
var sender_opts = {
target: {
address: "jobs",
capabilities: ["queue"]
}
}
conn.open_sender(sender_opts);
예: 요청 시 생성된 주제에서 수신
var conn = container.connect({host: "example.com"});
var receiver_opts = {
source: {
address: "notifications",
capabilities: ["topic"]
}
}
conn.open_receiver(receiver_opts);
자세한 내용은 다음 예제를 참조하십시오.
8.2. Cryostat 서브스크립션 생성 링크 복사링크가 클립보드에 복사되었습니다!
Cryostat 서브스크립션은 메시지 수신자를 나타내는 원격 서버의 상태입니다. 일반적으로 메시지 수신자는 클라이언트가 닫을 때 삭제됩니다. 그러나 지속성 서브스크립션은 영구 서브스크립션이므로 클라이언트는 해당 서브스크립션에서 분리한 다음 나중에 다시 연결할 수 있습니다. 분리된 동안 수신된 모든 메시지는 클라이언트가 다시 연결할 때 사용할 수 있습니다.
Cryostat 서브스크립션은 클라이언트 컨테이너 ID와 수신자 이름을 결합하여 서브스크립션 ID를 형성하여 고유하게 식별됩니다. 서브스크립션을 복구하려면 안정적인 값이 있어야 합니다.
연결 컨테이너 ID를
client-1과 같은 안정적인 값으로 설정합니다.var container = rhea.create_container({id: "client-1"});고정 이름(예:
sub-1)을 사용하여 수신자를 생성하고 expiration 및expiry_policy속성을 설정하여지속성을 위해 수신자 소스를 구성합니다.var receiver_opts = { source: { address: "notifications", name: "sub-1", durable: 2, expiry_policy: "never" } } conn.open_receiver(receiver_opts);
서브스크립션에서 분리하려면 receiver.detach() 메서드를 사용합니다. 서브스크립션을 종료하려면 receiver.close() 메서드를 사용합니다.
자세한 내용은ship -subscribe.js 예제 를 참조하십시오.
9장. 오류 처리 링크 복사링크가 클립보드에 복사되었습니다!
AMQ JavaScript의 오류는 AMQP 프로토콜 또는 연결 오류에 해당하는 이름이 지정된 이벤트를 가로채서 처리할 수 있습니다.
9.1. 연결 및 프로토콜 오류 처리 링크 복사링크가 클립보드에 복사되었습니다!
다음 이벤트를 가로채어 프로토콜 수준 오류를 처리할 수 있습니다.
-
connection_error -
session_error -
sender_error -
receiver_error -
protocol_error -
오류
이러한 이벤트는 이벤트에 있는 특정 오브젝트에 오류 조건이 있을 때마다 실행됩니다. 오류 처리기를 호출한 후 해당 < object> _close 처리기도 호출됩니다.
이벤트 인수에는 error 오브젝트에 액세스하는 데 대한 오류 속성이 있습니다.
예: 오류 처리
container.on("error", function (event) {
console.log("An error!", event.error);
});
오류 발생 시 닫기 처리기가 호출되므로 오류 처리기 내에서 오류 자체만 처리되어야 합니다. 리소스 정리는 닫기 처리기에서 관리할 수 있습니다. 특정 오브젝트에 고유한 오류 처리가 없는 경우 일반적인 오류 이벤트를 처리하는 것이 일반적이며 더 구체적인 처리기가 없습니다.
재연결이 활성화되고 원격 서버가 amqp:connection:forced 조건으로 연결을 종료하면 클라이언트는 이를 오류로 처리하지 않으므로 connection_error 이벤트를 실행하지 않습니다. 대신 클라이언트가 다시 연결 프로세스를 시작합니다.
10장. 로깅 링크 복사링크가 클립보드에 복사되었습니다!
10.1. 로깅 구성 링크 복사링크가 클립보드에 복사되었습니다!
AMQ JavaScript는 JavaScript 디버그 모듈을 사용하여 로깅을 구현합니다.
예를 들어 자세한 클라이언트 로깅을 활성화하려면 DEBUG 환경 변수를 rhea* 로 설정합니다.
예: 자세한 로깅 활성화
$ export DEBUG=rhea*
$ <your-client-program>
10.2. 프로토콜 로깅 활성화 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트는 AMQP 프로토콜 프레임을 콘솔에 기록할 수 있습니다. 이 데이터는 문제를 진단할 때 매우 중요합니다.
프로토콜 로깅을 활성화하려면 DEBUG 환경 변수를 rhea:frames 로 설정합니다.
예: 프로토콜 로깅 활성화
$ export DEBUG=rhea:frames
$ <your-client-program>
11장. 파일 기반 구성 링크 복사링크가 클립보드에 복사되었습니다!
AMQ JavaScript는 connect.json 이라는 로컬 파일에서 연결을 설정하는 데 사용되는 구성 옵션을 읽을 수 있습니다. 이를 통해 배포 시 애플리케이션에서 연결을 구성할 수 있습니다.
라이브러리는 애플리케이션에서 연결 옵션을 제공하지 않고 컨테이너 연결 메서드를 호출할 때 파일을 읽으려고 합니다.
11.1. 파일 위치 링크 복사링크가 클립보드에 복사되었습니다!
설정된 경우 AMQ JavaScript는 MESSAGING_CONNECT_FILE 환경 변수의 값을 사용하여 구성 파일을 찾습니다.
MESSAGING_CONNECT_FILE 이 설정되지 않은 경우 AMQ JavaScript는 다음 위치에서 connect.json 이라는 파일을 검색하고 표시된 순서대로 검색합니다. 첫 번째 일치 시 발생할 때 중지됩니다.
Linux의 경우:
-
$PWD/connect.json. 여기서$PWD는 클라이언트 프로세스의 현재 작업 디렉터리입니다. -
$HOME/.config/messaging/connect.json.json입니다. 여기서$HOME은 현재 사용자 홈 디렉터리입니다. -
/etc/messaging/connect.json
Windows에서:
-
%CD%/connect.json. 여기서%cd%는 클라이언트 프로세스의 현재 작업 디렉터리입니다.
connect.json 파일이 없는 경우 라이브러리는 모든 옵션에 기본값을 사용합니다.
11.2. 파일 형식 링크 복사링크가 클립보드에 복사되었습니다!
connect.json 파일에는 JavaScript 주석이 추가로 지원되는 JSON 데이터가 포함되어 있습니다.
모든 구성 속성은 선택 사항이거나 기본값이 있으므로 간단한 예제에서는 몇 가지 세부 정보만 제공합니다.
예: simple connect.json 파일
{
"host": "example.com",
"user": "alice",
"password": "secret"
}
SASL 및 SSL/TLS 옵션은 "sasl" 및 " tls" 네임스페이스에 중첩되어 있습니다.
예: SASL 및 SSL/TLS 옵션이 있는 connect.json 파일
{
"host": "example.com",
"user": "ortega",
"password": "secret",
"sasl": {
"mechanisms": ["SCRAM-SHA-1", "SCRAM-SHA-256"]
},
"tls": {
"cert": "/home/ortega/cert.pem",
"key": "/home/ortega/key.pem"
}
}
11.3. 구성 옵션 링크 복사링크가 클립보드에 복사되었습니다!
점(.)을 포함하는 옵션 키는 네임스페이스 내에 중첩된 속성을 나타냅니다.
| 키 | 값 유형 | 기본값 | 설명 |
|---|---|---|---|
|
| string |
|
SSL/TLS의 |
|
| string |
| 원격 호스트의 호스트 이름 또는 IP 주소입니다. |
|
| 문자열 또는 숫자 |
| 포트 번호 또는 포트 리터럴 |
|
| string | 없음 | 인증을 위한 사용자 이름 |
|
| string | 없음 | 인증을 위한 암호 |
|
| 목록 또는 문자열 | none (시스템 기본값) | 활성화된 SASL 메커니즘의 JSON 목록입니다. 베어 문자열은 하나의 메커니즘을 나타냅니다. 지정되지 않은 경우 클라이언트는 시스템에서 제공하는 기본 메커니즘을 사용합니다. |
|
| boolean |
| 일반 텍스트 암호를 보내는 메커니즘 활성화 |
|
| string | 없음 | 클라이언트 인증서의 파일 이름 또는 데이터베이스 ID |
|
| string | 없음 | 클라이언트 인증서에 대한 개인 키의 파일 이름 또는 데이터베이스 ID |
|
| string | 없음 | CA 인증서의 파일 이름, 디렉터리 또는 데이터베이스 ID |
|
| boolean |
| 일치하는 호스트 이름이 있는 유효한 서버 인증서 필요 |
12장. 상호 운용성 링크 복사링크가 클립보드에 복사되었습니다!
이 장에서는 다른 AMQ 구성 요소와 함께 AMQ JavaScript를 사용하는 방법에 대해 설명합니다. AMQ 구성 요소의 호환성 개요는 제품 소개 를 참조하십시오.
12.1. 다른 AMQP 클라이언트와 상호 작용 링크 복사링크가 클립보드에 복사되었습니다!
AMQP 메시지는 AMQP 유형 시스템을 사용하여 구성됩니다. 이러한 공통 형식은 다른 언어의 AMQP 클라이언트가 서로 상호 운용할 수 있는 이유 중 하나입니다.
메시지를 보낼 때 AMQ JavaScript는 언어 네이티브 유형을 AMQP 인코딩 데이터로 자동으로 변환합니다. 메시지를 수신하면 역방향 변환이 수행됩니다.
AMQP 유형에 대한 자세한 내용은 Apache Cryostat 프로젝트에서 유지 관리하는 대화형 유형 참조 에서 확인할 수 있습니다.
| AMQP 유형 | 설명 |
|---|---|
| 빈 값 | |
| true 또는 false 값 | |
| 단일 유니코드 문자 | |
| 유니코드 문자 시퀀스 | |
| 바이트 시퀀스 | |
| 서명된 8비트 정수 | |
| 서명된 16비트 정수 | |
| 부호 있는 32비트 정수 | |
| 부호 있는 64비트 정수 | |
| 서명되지 않은 8비트 정수 | |
| 서명되지 않은 16비트 정수 | |
| 서명되지 않은 32비트 정수 | |
| 서명되지 않은 64비트 정수 | |
| 32비트 부동 소수점 숫자 | |
| 64비트 부동 소수점 숫자 | |
| 단일 형식의 값 시퀀스 | |
| 변수 유형 값의 시퀀스 | |
| 고유 키에서 값으로 매핑 | |
| 범용 고유 식별자 | |
| 제한된 도메인에서 7비트 ASCII 문자열 | |
| 시간 내 절대 지점 |
JavaScript는 AMQP에서 인코딩할 수 있는 것보다 기본 유형이 적습니다. 특정 AMQP 유형이 포함된 메시지를 보내려면 rhea/types.js 모듈에서 wrap_ 함수를 사용합니다.
| AMQP 유형 | 인코딩 전 AMQ JavaScript 유형 | 디코딩 후 AMQ JavaScript 유형 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 인코딩 전 AMQ JavaScript 유형 | AMQ C++ 유형 | AMQ .NET 유형 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| - | - |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 인코딩 전 AMQ JavaScript 유형 | AMQ Python 유형 | AMQ Ruby 유형 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| - | - |
|
|
|
|
|
|
|
|
12.2. AMQ JMS와 상호 작용 링크 복사링크가 클립보드에 복사되었습니다!
AMQP는 JMS 메시징 모델에 대한 표준 매핑을 정의합니다. 이 섹션에서는 해당 매핑의 다양한 측면에 대해 설명합니다. 자세한 내용은 AMQ JMS Interoperability 장을 참조하십시오.
JMS 메시지 유형
AMQ JavaScript는 본문 유형이 다를 수 있는 단일 메시지 유형을 제공합니다. 반대로 JMS API는 다양한 종류의 데이터를 나타내는 다양한 메시지 유형을 사용합니다. 아래 표는 특정 본문 유형이 JMS 메시지 유형에 매핑되는 방식을 나타냅니다.
결과 JMS 메시지 유형을 보다 명시적으로 제어하려면 x-opt-jms-msg-type 메시지 주석을 설정할 수 있습니다. 자세한 내용은 AMQ JMS Interoperability 장을 참조하십시오.
| AMQ JavaScript 본문 유형 | JMS 메시지 유형 |
|---|---|
|
| |
|
| |
|
| |
| 기타 유형 |
12.3. AMQ Broker에 연결 링크 복사링크가 클립보드에 복사되었습니다!
AMQ Broker는 AMQP 1.0 클라이언트와 상호 작동하도록 설계되었습니다. 브로커가 AMQP 메시징에 대해 구성되었는지 확인하려면 다음을 확인하십시오.
- 네트워크 방화벽의 포트 5672가 열려 있습니다.
- AMQ Broker AMQP 어셉터가 활성화되어 있습니다. Default acceptor 설정을 참조하십시오.
- 필요한 주소는 브로커에 구성되어 있습니다. 주소, 큐 및 주제를 참조하십시오.
- 브로커는 클라이언트의 액세스를 허용하도록 구성되며 클라이언트는 필요한 인증 정보를 전송하도록 구성됩니다. Broker Security 를 참조하십시오.
부록 A. 서브스크립션 사용 링크 복사링크가 클립보드에 복사되었습니다!
AMQ는 소프트웨어 서브스크립션을 통해 제공됩니다. 서브스크립션을 관리하려면 Red Hat 고객 포털에서 계정에 액세스하십시오.
A.1. 계정 액세스 링크 복사링크가 클립보드에 복사되었습니다!
프로세스
- access.redhat.com 으로 이동합니다.
- 계정이 없는 경우 계정을 생성합니다.
- 계정에 로그인합니다.
A.2. 서브스크립션 활성화 링크 복사링크가 클립보드에 복사되었습니다!
프로세스
- access.redhat.com 으로 이동합니다.
- 내 서브스크립션 으로 이동합니다.
- 서브스크립션 활성화로 이동하여 16자리 활성화 번호를 입력합니다.
A.3. 릴리스 파일 다운로드 링크 복사링크가 클립보드에 복사되었습니다!
.zip, .tar.gz 및 기타 릴리스 파일에 액세스하려면 고객 포털을 사용하여 다운로드할 관련 파일을 찾습니다. RPM 패키지 또는 Red Hat Maven 리포지토리를 사용하는 경우 이 단계는 필요하지 않습니다.
프로세스
- 브라우저를 열고 Red Hat Customer Portal 제품 다운로드 페이지에 access.redhat.com/downloads.
- INTEGRATION 및 AUTOMATION 카테고리에서 Red Hat AMQ 항목을 찾습니다.
- 원하는 AMQ 제품을 선택합니다. 소프트웨어 다운로드 페이지가 열립니다.
- 구성 요소에 대한 다운로드 링크를 클릭합니다.
A.4. 패키지에 대한 시스템 등록 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Enterprise Linux에 이 제품의 RPM 패키지를 설치하려면 시스템을 등록해야 합니다. 다운로드한 릴리스 파일을 사용하는 경우 이 단계는 필요하지 않습니다.
프로세스
- access.redhat.com 으로 이동합니다.
- Registration Assistant 로 이동합니다.
- OS 버전을 선택하고 다음 페이지로 이동합니다.
- 시스템 터미널에서 나열된 명령을 사용하여 등록을 완료합니다.
시스템 등록에 대한 자세한 내용은 다음 리소스 중 하나를 참조하십시오.
부록 B. 예제와 함께 AMQ Broker 사용 링크 복사링크가 클립보드에 복사되었습니다!
AMQ JavaScript 예제에는 example이라는 큐가 있는 실행 중인 메시지 브로커가 필요합니다. 아래 절차를 사용하여 브로커를 설치 및 시작하고 큐를 정의합니다.
B.1. 브로커 설치 링크 복사링크가 클립보드에 복사되었습니다!
AMQ Broker 시작하기 의 지침에 따라 브로커를 설치하고 브로커 인스턴스를 생성합니다. 익명 액세스를 활성화합니다.
다음 절차에서는 브로커 인스턴스의 위치를 < broker-instance-dir>으로 참조합니다.
B.2. 브로커 시작 링크 복사링크가 클립보드에 복사되었습니다!
프로세스
브로커를 시작하려면
Artemis run명령을 사용합니다.$ <broker-instance-dir>/bin/artemis run시작 중에 기록된 심각한 오류가 있는지 콘솔 출력을 확인합니다.
이제 브로커 로그 서버가준비되면 활성화됩니다.$ example-broker/bin/artemis run __ __ ____ ____ _ /\ | \/ |/ __ \ | _ \ | | / \ | \ / | | | | | |_) |_ __ ___ | | _____ _ __ / /\ \ | |\/| | | | | | _ <| '__/ _ \| |/ / _ \ '__| / ____ \| | | | |__| | | |_) | | | (_) | < __/ | /_/ \_\_| |_|\___\_\ |____/|_| \___/|_|\_\___|_| Red Hat AMQ <version> 2020-06-03 12:12:11,807 INFO [org.apache.activemq.artemis.integration.bootstrap] AMQ101000: Starting ActiveMQ Artemis Server ... 2020-06-03 12:12:12,336 INFO [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live ...
B.3. 큐 생성 링크 복사링크가 클립보드에 복사되었습니다!
새 터미널에서 artemis 큐 명령을 사용하여 examples 라는 큐를 생성합니다.
$ <broker-instance-dir>/bin/artemis queue create --name examples --address examples --auto-create-address --anycast
일련의 예 또는 아니오 질문에 대답하라는 메시지가 표시됩니다. 모두 N 에 대한 답변입니다.
큐가 생성되면 브로커를 예제 프로그램과 함께 사용할 준비가 된 것입니다.
B.4. 브로커 중지 링크 복사링크가 클립보드에 복사되었습니다!
예제 실행을 완료하면 artemis stop 명령을 사용하여 브로커를 중지합니다.
$ <broker-instance-dir>/bin/artemis stop
2023-09-26에 최종 업데이트된 문서