Dieser Inhalt ist in der von Ihnen ausgewählten Sprache nicht verfügbar.
Using the AMQ Ruby Client
For Use with AMQ Clients 2.9
Abstract
Making open source more inclusive Link kopierenLink in die Zwischenablage kopiert!
Red Hat is committed to replacing problematic language in our code, documentation, and web properties. We are beginning with these four terms: master, slave, blacklist, and whitelist. Because of the enormity of this endeavor, these changes will be implemented gradually over several upcoming releases. For more details, see our CTO Chris Wright’s message.
Chapter 1. Overview Link kopierenLink in die Zwischenablage kopiert!
AMQ Ruby is a library for developing messaging applications. It enables you to write Ruby applications that send and receive AMQP messages.
The AMQ Ruby client is a Technology Preview feature only. Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process.
For more information about the support scope of Red Hat Technology Preview features, see https://access.redhat.com/support/offerings/techpreview/.
AMQ Ruby is part of AMQ Clients, a suite of messaging libraries supporting multiple languages and platforms. For an overview of the clients, see AMQ Clients Overview. For information about this release, see AMQ Clients 2.9 Release Notes.
AMQ Ruby is based on the Proton API from Apache Qpid. For detailed API documentation, see the AMQ Ruby API reference.
1.1. Key features Link kopierenLink in die Zwischenablage kopiert!
- An event-driven API that simplifies integration with existing applications
- SSL/TLS for secure communication
- Flexible SASL authentication
- Automatic reconnect and failover
- Seamless conversion between AMQP and language-native data types
- Access to all the features and capabilities of AMQP 1.0
1.2. Supported standards and protocols Link kopierenLink in die Zwischenablage kopiert!
AMQ Ruby supports the following industry-recognized standards and network protocols:
- Version 1.0 of the Advanced Message Queueing Protocol (AMQP)
- Versions 1.0, 1.1, 1.2, and 1.3 of the Transport Layer Security (TLS) protocol, the successor to SSL
- Simple Authentication and Security Layer (SASL) mechanisms supported by Cyrus SASL, including ANONYMOUS, PLAIN, SCRAM, EXTERNAL, and GSSAPI (Kerberos)
- Modern TCP with IPv6
1.3. Supported configurations Link kopierenLink in die Zwischenablage kopiert!
AMQ Ruby supports the OS and language versions listed below. For more information, see Red Hat AMQ 7 Supported Configurations.
- Red Hat Enterprise Linux 7 with Ruby 2.0
- Red Hat Enterprise Linux 8 with Ruby 2.5
AMQ Ruby is supported in combination with the following AMQ components and versions:
- All versions of AMQ Broker
- All versions of AMQ Interconnect
- A-MQ 6 versions 6.2.1 and newer
1.4. Terms and concepts Link kopierenLink in die Zwischenablage kopiert!
This section introduces the core API entities and describes how they operate together.
| Entity | Description |
|---|---|
| Container | A top-level container of connections. |
| Connection | A channel for communication between two peers on a network. It contains sessions. |
| Session | A context for sending and receiving messages. It contains senders and receivers. |
| Sender | A channel for sending messages to a target. It has a target. |
| Receiver | A channel for receiving messages from a source. It has a source. |
| Source | A named point of origin for messages. |
| Target | A named destination for messages. |
| Message | An application-specific piece of information. |
| Delivery | A message transfer. |
AMQ Ruby sends and receives messages. Messages are transferred between connected peers over senders and receivers. Senders and receivers are established over sessions. Sessions are established over connections. Connections are established between two uniquely identified containers. Though a connection can have multiple sessions, often this is not needed. The API allows you to ignore sessions unless you require them.
A sending peer creates a sender to send messages. The sender has a target that identifies a queue or topic at the remote peer. A receiving peer creates a receiver to receive messages. The receiver has a source that identifies a queue or topic at the remote peer.
The sending of a message is called a delivery. The message is the content sent, including all metadata such as headers and annotations. The delivery is the protocol exchange associated with the transfer of that content.
To indicate that a delivery is complete, either the sender or the receiver settles it. When the other side learns that it has been settled, it will no longer communicate about that delivery. The receiver can also indicate whether it accepts or rejects the message.
1.5. Document conventions Link kopierenLink in die Zwischenablage kopiert!
The sudo command
In this document, sudo is used for any command that requires root privileges. Exercise caution when using sudo because any changes can affect the entire system. For more information about sudo, see Using the sudo command.
File paths
In this document, all file paths are valid for Linux, UNIX, and similar operating systems (for example, /home/andrea). On Microsoft Windows, you must use the equivalent Windows paths (for example, C:\Users\andrea).
Variable text
This document contains code blocks with variables that you must replace with values specific to your environment. Variable text is enclosed in arrow braces and styled as italic monospace. For example, in the following command, replace <project-dir> with the value for your environment:
cd <project-dir>
$ cd <project-dir>
Chapter 2. Installation Link kopierenLink in die Zwischenablage kopiert!
This chapter guides you through the steps to install AMQ Ruby in your environment.
2.1. Prerequisites Link kopierenLink in die Zwischenablage kopiert!
- You must have a subscription to access AMQ release files and repositories.
- To install packages on Red Hat Enterprise Linux, you must register your system.
- To use AMQ Ruby, you must install Ruby in your environment.
2.2. Installing on Red Hat Enterprise Linux Link kopierenLink in die Zwischenablage kopiert!
Procedure
Use the
subscription-managercommand to subscribe to the required package repositories. If necessary, replace<variant>with the value for your variant of Red Hat Enterprise Linux (for example,serverorworkstation).Red Hat Enterprise Linux 7
sudo subscription-manager repos --enable=amq-clients-2-for-rhel-7-<variant>-rpms
$ sudo subscription-manager repos --enable=amq-clients-2-for-rhel-7-<variant>-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Enterprise Linux 8
sudo subscription-manager repos --enable=amq-clients-2-for-rhel-8-x86_64-rpms
$ sudo subscription-manager repos --enable=amq-clients-2-for-rhel-8-x86_64-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow Use the
yumcommand to install therubygem-qpid_protonandrubygem-qpid_proton-docpackages.sudo yum install rubygem-qpid_proton rubygem-qpid_proton-doc
$ sudo yum install rubygem-qpid_proton rubygem-qpid_proton-docCopy to Clipboard Copied! Toggle word wrap Toggle overflow
For more information about using packages, see Appendix B, Using Red Hat Enterprise Linux packages.
Chapter 3. Getting started Link kopierenLink in die Zwischenablage kopiert!
This chapter guides you through the steps to set up your environment and run a simple messaging program.
3.1. Prerequisites Link kopierenLink in die Zwischenablage kopiert!
- You must complete the installation procedure for your environment.
-
You must have an AMQP 1.0 message broker listening for connections on interface
localhostand port5672. It must have anonymous access enabled. For more information, see Starting the broker. -
You must have a queue named
examples. For more information, see Creating a queue.
3.2. Running Hello World Link kopierenLink in die Zwischenablage kopiert!
The Hello World example creates a connection to the broker, sends a message containing a greeting to the examples queue, and receives it back. On success, it prints the received message to the console.
Change to the examples directory and run the helloworld.rb example.
cd /usr/share/proton/examples/ruby/ ruby helloworld.rb amqp://127.0.0.1 examples
$ cd /usr/share/proton/examples/ruby/
$ ruby helloworld.rb amqp://127.0.0.1 examples
Hello World!
Chapter 4. Examples Link kopierenLink in die Zwischenablage kopiert!
This chapter demonstrates the use of AMQ Ruby through example programs.
For more examples, see the AMQ Ruby example suite and the Qpid Proton Ruby examples.
4.1. Sending messages Link kopierenLink in die Zwischenablage kopiert!
This client program connects to a server using <connection-url>, creates a sender for target <address>, sends a message containing <message-body>, closes the connection, and exits.
Example: Sending messages
Running the example
To run the example program, copy it to a local file and invoke it using the ruby command. For more information, see Chapter 3, Getting started.
ruby send.rb amqp://localhost queue1 hello
$ ruby send.rb amqp://localhost queue1 hello
4.2. Receiving messages Link kopierenLink in die Zwischenablage kopiert!
This client program connects to a server using <connection-url>, creates a receiver for source <address>, and receives messages until it is terminated or it reaches <count> messages.
Example: Receiving messages
Running the example
To run the example program, copy it to a local file and invoke it using the ruby command. For more information, see Chapter 3, Getting started.
ruby receive.rb amqp://localhost queue1
$ ruby receive.rb amqp://localhost queue1
Chapter 5. Network connections Link kopierenLink in die Zwischenablage kopiert!
5.1. Connection URLs Link kopierenLink in die Zwischenablage kopiert!
Connection URLs encode the information used to establish new connections.
Connection URL syntax
scheme://host[:port]
scheme://host[:port]
-
Scheme - The connection transport, either
amqpfor unencrypted TCP oramqpsfor TCP with SSL/TLS encryption. - Host - The remote network host. The value can be a hostname or a numeric IP address. IPv6 addresses must be enclosed in square brackets.
-
Port - The remote network port. This value is optional. The default value is 5672 for the
amqpscheme and 5671 for theamqpsscheme.
Connection URL examples
amqps://example.com amqps://example.net:56720 amqp://127.0.0.1 amqp://[::1]:2000
amqps://example.com
amqps://example.net:56720
amqp://127.0.0.1
amqp://[::1]:2000
Chapter 6. Senders and receivers Link kopierenLink in die Zwischenablage kopiert!
The client uses sender and receiver links to represent channels for delivering messages. Senders and receivers are unidirectional, with a source end for the message origin, and a target end for the message destination.
Sources and targets often point to queues or topics on a message broker. Sources are also used to represent subscriptions.
6.1. Creating queues and topics on demand Link kopierenLink in die Zwischenablage kopiert!
Some message servers support on-demand creation of queues and topics. When a sender or receiver is attached, the server uses the sender target address or the receiver source address to create a queue or topic with a name matching the address.
The message server typically defaults to creating either a queue (for one-to-one message delivery) or a topic (for one-to-many message delivery). The client can indicate which it prefers by setting the queue or topic capability on the source or target.
For more details, see the following examples:
6.2. Creating durable subscriptions Link kopierenLink in die Zwischenablage kopiert!
A durable subscription is a piece of state on the remote server representing a message receiver. Ordinarily, message receivers are discarded when a client closes. However, because durable subscriptions are persistent, clients can detach from them and then re-attach later. Any messages received while detached are available when the client re-attaches.
Durable subscriptions are uniquely identified by combining the client container ID and receiver name to form a subscription ID. These must have stable values so that the subscription can be recovered.
Chapter 7. Logging Link kopierenLink in die Zwischenablage kopiert!
7.1. Enabling protocol logging Link kopierenLink in die Zwischenablage kopiert!
The client can log AMQP protocol frames to the console. This data is often critical when diagnosing problems.
To enable protocol logging, set the PN_TRACE_FRM environment variable to 1:
Example: Enabling protocol logging
export PN_TRACE_FRM=1 <your-client-program>
$ export PN_TRACE_FRM=1
$ <your-client-program>
To disable protocol logging, unset the PN_TRACE_FRM environment variable.
Chapter 8. Interoperability Link kopierenLink in die Zwischenablage kopiert!
This chapter discusses how to use AMQ Ruby in combination with other AMQ components. For an overview of the compatibility of AMQ components, see the product introduction.
8.1. Interoperating with other AMQP clients Link kopierenLink in die Zwischenablage kopiert!
AMQP messages are composed using the AMQP type system. This common format is one of the reasons AMQP clients in different languages are able to interoperate with each other.
When sending messages, AMQ Ruby automatically converts language-native types to AMQP-encoded data. When receiving messages, the reverse conversion takes place.
More information about AMQP types is available at the interactive type reference maintained by the Apache Qpid project.
| AMQP type | Description |
|---|---|
| An empty value | |
| A true or false value | |
| A single Unicode character | |
| A sequence of Unicode characters | |
| A sequence of bytes | |
| A signed 8-bit integer | |
| A signed 16-bit integer | |
| A signed 32-bit integer | |
| A signed 64-bit integer | |
| An unsigned 8-bit integer | |
| An unsigned 16-bit integer | |
| An unsigned 32-bit integer | |
| An unsigned 64-bit integer | |
| A 32-bit floating point number | |
| A 64-bit floating point number | |
| A sequence of values of a single type | |
| A sequence of values of variable type | |
| A mapping from distinct keys to values | |
| A universally unique identifier | |
| A 7-bit ASCII string from a constrained domain | |
| An absolute point in time |
| AMQP type | AMQ Ruby type before encoding | AMQ Ruby type after decoding |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| AMQ Ruby type before encoding | AMQ C++ type | AMQ JavaScript type |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| AMQ Ruby type before encoding | AMQ .NET type | AMQ Python type |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8.2. Interoperating with AMQ JMS Link kopierenLink in die Zwischenablage kopiert!
AMQP defines a standard mapping to the JMS messaging model. This section discusses the various aspects of that mapping. For more information, see the AMQ JMS Interoperability chapter.
JMS message types
AMQ Ruby provides a single message type whose body type can vary. By contrast, the JMS API uses different message types to represent different kinds of data. The table below indicates how particular body types map to JMS message types.
For more explicit control of the resulting JMS message type, you can set the x-opt-jms-msg-type message annotation. See the AMQ JMS Interoperability chapter for more information.
| AMQ Ruby body type | JMS message type |
|---|---|
|
| |
|
| |
|
| |
| Any other type |
8.3. Connecting to AMQ Broker Link kopierenLink in die Zwischenablage kopiert!
AMQ Broker is designed to interoperate with AMQP 1.0 clients. Check the following to ensure the broker is configured for AMQP messaging:
- Port 5672 in the network firewall is open.
- The AMQ Broker AMQP acceptor is enabled. See Default acceptor settings.
- The necessary addresses are configured on the broker. See Addresses, Queues, and Topics.
- The broker is configured to permit access from your client, and the client is configured to send the required credentials. See Broker Security.
8.4. Connecting to AMQ Interconnect Link kopierenLink in die Zwischenablage kopiert!
AMQ Interconnect works with any AMQP 1.0 client. Check the following to ensure the components are configured correctly:
- Port 5672 in the network firewall is open.
- The router is configured to permit access from your client, and the client is configured to send the required credentials. See Securing network connections.
Appendix A. Using your subscription Link kopierenLink in die Zwischenablage kopiert!
AMQ is provided through a software subscription. To manage your subscriptions, access your account at the Red Hat Customer Portal.
A.1. Accessing your account Link kopierenLink in die Zwischenablage kopiert!
Procedure
- Go to access.redhat.com.
- If you do not already have an account, create one.
- Log in to your account.
A.2. Activating a subscription Link kopierenLink in die Zwischenablage kopiert!
Procedure
- Go to access.redhat.com.
- Navigate to My Subscriptions.
- Navigate to Activate a subscription and enter your 16-digit activation number.
A.3. Downloading release files Link kopierenLink in die Zwischenablage kopiert!
To access .zip, .tar.gz, and other release files, use the customer portal to find the relevant files for download. If you are using RPM packages or the Red Hat Maven repository, this step is not required.
Procedure
- Open a browser and log in to the Red Hat Customer Portal Product Downloads page at access.redhat.com/downloads.
- Locate the Red Hat AMQ entries in the INTEGRATION AND AUTOMATION category.
- Select the desired AMQ product. The Software Downloads page opens.
- Click the Download link for your component.
A.4. Registering your system for packages Link kopierenLink in die Zwischenablage kopiert!
To install RPM packages for this product on Red Hat Enterprise Linux, your system must be registered. If you are using downloaded release files, this step is not required.
Procedure
- Go to access.redhat.com.
- Navigate to Registration Assistant.
- Select your OS version and continue to the next page.
- Use the listed command in your system terminal to complete the registration.
For more information about registering your system, see one of the following resources:
Appendix B. Using Red Hat Enterprise Linux packages Link kopierenLink in die Zwischenablage kopiert!
This section describes how to use software delivered as RPM packages for Red Hat Enterprise Linux.
To ensure the RPM packages for this product are available, you must first register your system.
B.1. Overview Link kopierenLink in die Zwischenablage kopiert!
A component such as a library or server often has multiple packages associated with it. You do not have to install them all. You can install only the ones you need.
The primary package typically has the simplest name, without additional qualifiers. This package provides all the required interfaces for using the component at program run time.
Packages with names ending in -devel contain headers for C and C++ libraries. These are required at compile time to build programs that depend on this package.
Packages with names ending in -docs contain documentation and example programs for the component.
For more information about using RPM packages, see one of the following resources:
B.2. Searching for packages Link kopierenLink in die Zwischenablage kopiert!
To search for packages, use the yum search command. The search results include package names, which you can use as the value for <package> in the other commands listed in this section.
yum search <keyword>...
$ yum search <keyword>...
B.3. Installing packages Link kopierenLink in die Zwischenablage kopiert!
To install packages, use the yum install command.
sudo yum install <package>...
$ sudo yum install <package>...
B.4. Querying package information Link kopierenLink in die Zwischenablage kopiert!
To list the packages installed in your system, use the rpm -qa command.
rpm -qa
$ rpm -qa
To get information about a particular package, use the rpm -qi command.
rpm -qi <package>
$ rpm -qi <package>
To list all the files associated with a package, use the rpm -ql command.
rpm -ql <package>
$ rpm -ql <package>
Appendix C. Using AMQ Broker with the examples Link kopierenLink in die Zwischenablage kopiert!
The AMQ Ruby examples require a running message broker with a queue named examples. Use the procedures below to install and start the broker and define the queue.
C.1. Installing the broker Link kopierenLink in die Zwischenablage kopiert!
Follow the instructions in Getting Started with AMQ Broker to install the broker and create a broker instance. Enable anonymous access.
The following procedures refer to the location of the broker instance as <broker-instance-dir>.
C.2. Starting the broker Link kopierenLink in die Zwischenablage kopiert!
Procedure
Use the
artemis runcommand to start the broker.<broker-instance-dir>/bin/artemis run
$ <broker-instance-dir>/bin/artemis runCopy to Clipboard Copied! Toggle word wrap Toggle overflow Check the console output for any critical errors logged during startup. The broker logs
Server is now livewhen it is ready.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
C.3. Creating a queue Link kopierenLink in die Zwischenablage kopiert!
In a new terminal, use the artemis queue command to create a queue named examples.
<broker-instance-dir>/bin/artemis queue create --name examples --address examples --auto-create-address --anycast
$ <broker-instance-dir>/bin/artemis queue create --name examples --address examples --auto-create-address --anycast
You are prompted to answer a series of yes or no questions. Answer N for no to all of them.
Once the queue is created, the broker is ready for use with the example programs.
C.4. Stopping the broker Link kopierenLink in die Zwischenablage kopiert!
When you are done running the examples, use the artemis stop command to stop the broker.
<broker-instance-dir>/bin/artemis stop
$ <broker-instance-dir>/bin/artemis stop
Revised on 2021-05-07 10:16:28 UTC