Security News
GitHub Removes Malicious Pull Requests Targeting Open Source Repositories
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
The 'rhea' npm package is a high-level AMQP 1.0 client library for Node.js. It provides a comprehensive set of features for building messaging applications, including sending and receiving messages, managing connections, and handling various messaging patterns.
Sending Messages
This feature allows you to send messages to an AMQP broker. The code sample demonstrates how to connect to a broker, open a sender link, and send a message.
const rhea = require('rhea');
const connection = rhea.connect({ host: 'localhost', port: 5672 });
connection.open_sender('examples');
connection.on('sendable', function (context) {
context.sender.send({ body: 'Hello, World!' });
connection.close();
});
Receiving Messages
This feature allows you to receive messages from an AMQP broker. The code sample demonstrates how to connect to a broker, open a receiver link, and handle incoming messages.
const rhea = require('rhea');
const connection = rhea.connect({ host: 'localhost', port: 5672 });
connection.open_receiver('examples');
connection.on('message', function (context) {
console.log('Received message:', context.message.body);
connection.close();
});
Managing Connections
This feature allows you to manage connections to an AMQP broker. The code sample demonstrates how to handle connection open and close events.
const rhea = require('rhea');
const connection = rhea.connect({ host: 'localhost', port: 5672 });
connection.on('connection_open', function (context) {
console.log('Connection opened');
});
connection.on('connection_close', function (context) {
console.log('Connection closed');
});
The 'amqp10' package is another AMQP 1.0 client for Node.js. It provides similar functionalities to 'rhea' for sending and receiving messages, but 'rhea' is often preferred for its more comprehensive feature set and better performance.
The 'amqplib' package is an AMQP 0.9.1 client for Node.js. While it supports a different version of the AMQP protocol, it offers similar functionalities for messaging applications. 'rhea' is more suitable for users who need AMQP 1.0 support.
A reactive library for the AMQP protocol, for easy development of both clients and servers.
Brief example of sending and receiving a message through a broker/server listening on port 5672:
var container = require('rhea');
container.on('connection_open', function (context) {
context.connection.open_receiver('examples');
context.connection.open_sender('examples');
});
container.on('message', function (context) {
console.log(context.message.body);
context.connection.close();
});
container.once('sendable', function (context) {
context.sender.send({body:'Hello World!'});
});
container.connect({'port':5672});
output:
Hello World!
There are some examples of using the library under the examples folder. These include:
helloworld.js - essentially the code above, which sends and receives a single message through a broker
direct_helloworld.js - an example showing the sending of a single message without the use of a broker, by listening on a port and then openning a connection to itself over which the message is transfered.
simple_send.js - connects to a specified port then sends a number of messages to a given address
simple_recv.js - connects to a specified port then subscribes to receive a number of messages from a given address
These last two can be used together to demsontrate sending messages from one process to another, using a broker or similar intermediary to which they both connect.
The direct_recv.js example can be used in conjunction with the simple_send.js example to demonstrate sending messages between processes without the use of any intermediary. Note however the the default port of one or ther other will need to be changed through the -p command line option.
In durable_subscription, a subscriber and a publisherwhich demonstrate the notion of a durable subscription when used in conjunction with a broker such as ActiveMQ
In selector a receiver that uses a selector - a SQL like query string that restricts the set of messages delivered - and an accompanying sender
In sasl a sasl client showing how to authenticate to the service you connect to. This can be used against any broker as well as either of two example servers showing anonymous and plain mechanisms.
A tls client and server demonstrating connecting (and possibly authenticating) over a tls secured socket.
A client to demonstrate the built in automatic reconnection functionality along with a simple echo server against which it can be run. It can of course also be run against a broker instead (or as well!).
Both node based and web based websocket clients along with a server which will echo back any requests received. The clients can also be used against a websocket enabled AMQP broker with a queue or topic called 'examples'. The node based scritps require the 'ws' node module to be installed. The browser based example requires a browserified version of the rhea library (this can be created e.g. by calling npm run-script browserify or make browserify). The browserified and minimized javascript library is stored under the dist/ directory.
To run the examples you will need the dependencies installed: the library itself depends on the 'debug' module, and some of the examples depend on the 'yargs' module for command line option parsing.
The 'rhea' module itself must also be findable by node. You can do this either by checking out the code from git and setting NODE_PATH to include the directory to which you do so (i.e. the directory in which 'a directory named 'rhea' can be found, or you can install the module using npm.
Some of the examples assume an AMQP compatible broker, such as those offered by the ActiveMQ or Qpid Apache projects, is running.
There are four core types of object in the API:
Each of these inherits all the methods of EventEmitter, allowing handlers for particular events to be attached. Events that are not handled at sender or receiver scope are then propagated up to possibly be handled at connection scope. Events that are not handled at connection scope are then propagated up to possibly be handled at container scope.
An AMQP container from which outgoing connections can be made and/or to which incoming connections can be accepted. The module exports a default instance of a Container which can be used directly. Other instances can be created from that if needed using the create_container method. A container is identified by the id property. By default a uuid is used, but the property can be set to something more specific if desired before making or accepting any connections.
Connects to the server specified by the host and port supplied in the options and returns a Connection.
The options argument is an object that may contain any of the following fields:
If the transport is TLS, the options may additionally specify a 'servername' property. This allows the SNI to be controlled separately from the host option. If servername is not specified, the SNI will default to the host.
Starts a server socket listening for incoming connections on the port (and optionally interface) specified in the options.
The options argument is an object that may contain any of the following fields:
Returns a new container instance. The method takes an options object which can contain the following field:
If no id is specified a new uuid will be generated.
Simple utility for generating a stringified uuid, useful if you wish to specify distinct container ids for different connections.
Returns a function that can be used to create another function suitable for use as the value of 'connection_details' in a connect call in order to connect over websockets. The function returned here takes a websocket url and optional arguments. The websocket_connect method itself take the constructor of the WebSocket implementation to use. It has been tested with the implementation in firefox and also that in the node module 'ws'.
Used to start handling an incoming websocket connection as an AMQP connection. See the websocket echo server example for how to use it.
Establishes a link over which messages can be received and returns a Receiver representing that link. A receiving link is a subscription, i.e. it expresses a desire to receive messages.
The argument to this method can either be a simple string indicating the source of messages of interest (e.g. a queue name), or an options object that may contain any of the following fields:
Note: If the link doesn't specify a value for the prefetch and autoaccept options, the connection options are consulted followed by the container options. The default is used only if an option is not specified at any level.
Establishes a link over which messages can be sent and returns a Sender representing that link. A sending link is an analogous concept to a subscription for outgoing rather than incoming messages. I.e. it expresses a desire to send messages.
The argument to this method can either be a simple string indicating the target for messages of interest (e.g. a queue name), or an options object that may contain any of the following fields:
Note: If the link doesn't specify a value for the autosettle option, the connection options are consulted followed by the container options. The default is used only if an option is not specified at any level.
Sends the specified message over the default sender, which is a sending link whose target address is null. The use of this method depends on the peer supporting so-called 'anonymous relay' semantics, which most AMQP 1.0 brokers do. The message should have the 'to' field set to the intended destination.
Closes a connection (may take an error object which is an object that consists of condition and description fields).
Provide information about the connection status. If it's opened or closed.
Raised when the remote peer indicates the connection is open.
Raised when the remote peer indicates the connection is closed.
Raised when the underlying tcp connection is lost.
Closes a receiving link (i.e. cancels the subscription). (May take an error object which is an object that consists of condition and description fields).
Detaches a link without closing it. For durable subscriptions this means the subscription is inactive, but not cancelled.
By default, receivers have a prefetch window that is moved automatically by the library. However if desired the application can set the prefecth to zero and manage credit itself. Each invocation of add_credit() method issues credit for a further 'n' messages to be sent by the peer over this receiving link. [Note: flow()is an alias for add_credit()]
Returns the amount of outstanding credit that has been issued.
Raised when a message is received.
Raised when the remote peer indicates the link is open (i.e. attached in AMQP parlance).
Raised when the remote peer indicates the link is closed.
Sends a message. A message is an object that may contain the following fields:
Closes a sending link (may take an error object which is an object that consists of condition and description fields).
Detaches a link without closing it.
Returns true if the sender has available credits for sending a message. Otherwise it returns false.
Raised when the sender has sufficient credit to be able to transmit messages to its peer.
Raised when a sent message is accepted by the peer.
Raised when a sent message is released by the peer.
Raised when a sent message is rejected by the peer.
Raised when the remote peer indicates the link is open (i.e. attached in AMQP parlance).
Raised when the remote peer indicates the link is closed.
FAQs
reactive AMQP 1.0 library
The npm package rhea receives a total of 59,615 weekly downloads. As such, rhea popularity was classified as popular.
We found that rhea demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.