Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Java
  • Perl
    • AnyEvent::RabbitMQ (customized by us)
      • We chose it mostly because it didn't require us to install additional software. However, it seems that its author has abandoned it; we received no reply to an inquiry about incorporating our SSL patch below.
      • We have created a module named RabbitMessaging that uses AnyEvent::RabbitMQ.
        • It is much friendlier, but probably at the expense of AnyEvent functionality.
        • It relies on our patches to version 1.05 of AnyEvent::RabbitMQ. You may be able to use other versions, see description of patches below.
        • Read the warning about the consume() method in the RabbitMessaging.pm source code. You may want to use the get_message() method instead.
      • To use RabbitMessaging:
        • Download our RabbitMessaging.pm module
        • Install version 1.05 16 of AnyEvent::RabbitMQPatch or the latest version
          • Note that that AnyEvent::RabbitMQ version 1.16 or higher already includes the following patches which we previously had to manually apply to version 1.05 of AnyEvent::RabbitMQ
          as follows:
          • Apply
            • RabbitMQ-tls.patch to /usr/local/lib/site_perl/5../AnyEvent/RabbitMQ/RabbitMQ.pm (for TLS support)
          • Apply The following patch was never necessary, though it is harmless if you already have it installed: to
            • for /usr/local/lib/site_perl/5../AnyEvent/RabbitMQ/Channel.pm
          • AnyEvent::RabbitMQ version 1.20_21 includes our patch to support the no_ack flag for the get method.
        • Patch Net::AMQP::Common.pm (for persistent messages)and add the "l => \&unpack_long_long_integer" line as shown below.  This is necessary with our upgrade to RabbitMQ 3.11 and/or because of quorum queues.

          • Code Block
            my %_unpack_field_types = (
                V => sub { undef },
                S => \&unpack_long_string,
                I => \&unpack_long_integer,
                l => \&unpack_long_long_integer,
                D => sub {
                    my $input_ref = shift;
                    my $exp = unpack_octet($input_ref);
                    my $num = unpack_long_integer($input_ref);
                    $num / 10.0 ** $exp;
                },
                F => \&unpack_field_table,
                A => \&unpack_field_array,
                T => \&unpack_timestamp,
                t => \&unpack_boolean,
            );


        • Use sample-RabbitMessaging-code as a template for your app.
    • Net::STOMP::Client
      • Recommended by someone in the rabbitmq-discuss mailing list, its author is active in this list.
    • POE::Component::Client::AMQP
      • Also mentioned in rabbitmq-discuss mailing list.
  • Other clients from the RabbitMQ website:
    • .NET/C#
    • You are also welcome to use our AnyEvent::RabbitMQ patches without our RabbitMessaging module.
    • If you wish to use a newer version of AnyEvent::RabbitMQ:
    • Version 1.10 of AnyEvent::RabbitMQ includes our RabbitMQ-tls.patch.
    • You will need to apply RabbitMQ-Channel-args.patch if you use RabbitMessaging's publish method() or if you borrowed this line of code from it: No Format header => { 'delivery_mode' => 2 }, # make messages persistent
    • Erlang
      You may find it easier to go to http://www.rabbitmq.com/download.html and use the quick download links for each of the above languages.

You will need a RabbitMQ client to connect to the UH Message Broker.