summaryrefslogtreecommitdiff
path: root/examples/amqp_consumer.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/amqp_consumer.c')
-rw-r--r--examples/amqp_consumer.c189
1 files changed, 0 insertions, 189 deletions
diff --git a/examples/amqp_consumer.c b/examples/amqp_consumer.c
deleted file mode 100644
index 2710643..0000000
--- a/examples/amqp_consumer.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0
- *
- * The contents of this file are subject to the Mozilla Public License
- * Version 1.1 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and
- * limitations under the License.
- *
- * The Original Code is librabbitmq.
- *
- * The Initial Developers of the Original Code are LShift Ltd, Cohesive
- * Financial Technologies LLC, and Rabbit Technologies Ltd. Portions
- * created before 22-Nov-2008 00:00:00 GMT by LShift Ltd, Cohesive
- * Financial Technologies LLC, or Rabbit Technologies Ltd are Copyright
- * (C) 2007-2008 LShift Ltd, Cohesive Financial Technologies LLC, and
- * Rabbit Technologies Ltd.
- *
- * Portions created by LShift Ltd are Copyright (C) 2007-2009 LShift
- * Ltd. Portions created by Cohesive Financial Technologies LLC are
- * Copyright (C) 2007-2009 Cohesive Financial Technologies
- * LLC. Portions created by Rabbit Technologies Ltd are Copyright (C)
- * 2007-2009 Rabbit Technologies Ltd.
- *
- * Portions created by Tony Garnock-Jones are Copyright (C) 2009-2010
- * LShift Ltd and Tony Garnock-Jones.
- *
- * All Rights Reserved.
- *
- * Contributor(s): ______________________________________.
- *
- * Alternatively, the contents of this file may be used under the terms
- * of the GNU General Public License Version 2 or later (the "GPL"), in
- * which case the provisions of the GPL are applicable instead of those
- * above. If you wish to allow use of your version of this file only
- * under the terms of the GPL, and not to allow others to use your
- * version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the
- * notice and other provisions required by the GPL. If you do not
- * delete the provisions above, a recipient may use your version of
- * this file under the terms of any one of the MPL or the GPL.
- *
- * ***** END LICENSE BLOCK *****
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <stdint.h>
-#include <amqp.h>
-#include <amqp_framing.h>
-
-#include <assert.h>
-
-#include "utils.h"
-
-#define SUMMARY_EVERY_US 1000000
-
-static void run(amqp_connection_state_t conn)
-{
- uint64_t start_time = now_microseconds();
- int received = 0;
- int previous_received = 0;
- uint64_t previous_report_time = start_time;
- uint64_t next_summary_time = start_time + SUMMARY_EVERY_US;
-
- amqp_frame_t frame;
- int result;
- size_t body_received;
- size_t body_target;
-
- uint64_t now;
-
- while (1) {
- now = now_microseconds();
- if (now > next_summary_time) {
- int countOverInterval = received - previous_received;
- double intervalRate = countOverInterval / ((now - previous_report_time) / 1000000.0);
- printf("%d ms: Received %d - %d since last report (%d Hz)\n",
- (int)(now - start_time) / 1000, received, countOverInterval, (int) intervalRate);
-
- previous_received = received;
- previous_report_time = now;
- next_summary_time += SUMMARY_EVERY_US;
- }
-
- amqp_maybe_release_buffers(conn);
- result = amqp_simple_wait_frame(conn, &frame);
- if (result < 0)
- return;
-
- if (frame.frame_type != AMQP_FRAME_METHOD)
- continue;
-
- if (frame.payload.method.id != AMQP_BASIC_DELIVER_METHOD)
- continue;
-
- result = amqp_simple_wait_frame(conn, &frame);
- if (result < 0)
- return;
-
- if (frame.frame_type != AMQP_FRAME_HEADER) {
- fprintf(stderr, "Expected header!");
- abort();
- }
-
- body_target = frame.payload.properties.body_size;
- body_received = 0;
-
- while (body_received < body_target) {
- result = amqp_simple_wait_frame(conn, &frame);
- if (result < 0)
- return;
-
- if (frame.frame_type != AMQP_FRAME_BODY) {
- fprintf(stderr, "Expected body!");
- abort();
- }
-
- body_received += frame.payload.body_fragment.len;
- assert(body_received <= body_target);
- }
-
- received++;
- }
-}
-
-int main(int argc, char const * const *argv) {
- char const *hostname;
- int port;
- char const *exchange;
- char const *bindingkey;
-
- int sockfd;
- amqp_connection_state_t conn;
-
- amqp_bytes_t queuename;
-
- if (argc < 3) {
- fprintf(stderr, "Usage: amqp_consumer host port\n");
- return 1;
- }
-
- hostname = argv[1];
- port = atoi(argv[2]);
- exchange = "amq.direct"; /* argv[3]; */
- bindingkey = "test queue"; /* argv[4]; */
-
- conn = amqp_new_connection();
-
- die_on_error(sockfd = amqp_open_socket(hostname, port), "Opening socket");
- amqp_set_sockfd(conn, sockfd);
- die_on_amqp_error(amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"),
- "Logging in");
- amqp_channel_open(conn, 1);
- die_on_amqp_error(amqp_get_rpc_reply(conn), "Opening channel");
-
- {
- amqp_queue_declare_ok_t *r = amqp_queue_declare(conn, 1, amqp_empty_bytes, 0, 0, 0, 1,
- amqp_empty_table);
- die_on_amqp_error(amqp_get_rpc_reply(conn), "Declaring queue");
- queuename = amqp_bytes_malloc_dup(r->queue);
- if (queuename.bytes == NULL) {
- fprintf(stderr, "Out of memory while copying queue name");
- return 1;
- }
- }
-
- amqp_queue_bind(conn, 1, queuename, amqp_cstring_bytes(exchange), amqp_cstring_bytes(bindingkey),
- amqp_empty_table);
- die_on_amqp_error(amqp_get_rpc_reply(conn), "Binding queue");
-
- amqp_basic_consume(conn, 1, queuename, amqp_empty_bytes, 0, 1, 0, amqp_empty_table);
- die_on_amqp_error(amqp_get_rpc_reply(conn), "Consuming");
-
- run(conn);
-
- die_on_amqp_error(amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS), "Closing channel");
- die_on_amqp_error(amqp_connection_close(conn, AMQP_REPLY_SUCCESS), "Closing connection");
- die_on_error(amqp_destroy_connection(conn), "Ending connection");
-
- return 0;
-}