本文共 1558 字,大约阅读时间需要 5 分钟。
RabbitMQ服务客户端的的业务逻辑如下: 1,打开 socket: amqp_new_connection(); amqp_open_socket(hostname, port); 2,用户登陆: amqp_set_sockfd(conn, sockfd); amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, userName, password); 3,打开channel amqp_channel_open(conn, 1); amqp_get_rpc_reply(conn); 4,声明 Exchange amqp_exchange_declare(conn, 1, amqp_cstring_bytes(exchange), amqp_cstring_bytes("fanout"), 0, 0, amqp_empty_table); 5,声明Queue amqp_queue_declare_ok_t *r = amqp_queue_declare(conn, 1, amqp_cstring_bytes(queue), 0, 0, 0, 1,amqp_empty_table); 6,将Queue和Exchange进行binding amqp_queue_bind(conn, 1, queuename, amqp_cstring_bytes(exchange), amqp_cstring_bytes(bindingkey), amqp_empty_table); 注意:binding动作在程序中只能执行一次,如果第二次再执行,程序会crash! 7,操作,包括 发送(publish),接收(consume)等。 发送: amqp_basic_publish(conn, 1, amqp_cstring_bytes(exchange), amqp_cstring_bytes(routingkey), 0, 0, NULL, amqp_cstring_bytes(messagebody)); 接收: amqp_basic_consume(conn, 1,queuename, amqp_empty_bytes, 0, 1, 0, amqp_empty_table); amqp_maybe_release_buffers(conn); 此处应该注意:接受的过程是一个阻塞的异步过程,所以必须在子线程中进行操作,这样就不会影响主线程中的UI操作,所以在以前使用的block编程就用了很大的用武之地,一方面,通过block多核编程提高程序的运行效率,第二方面,异步的dispatch能够完美的解决阻塞的问题,并且可以使处理后返回的数据直接在OC类中直接使用,从而规避了在C函数中传递OC的指针来对OC的对象进行的操作,真是一劳永逸的好方法,推荐大家使用。 8,进行unbinding amqp_queue_unbind(conn, 1, queuename, amqp_cstring_bytes(exchange), amqp_cstring_bytes(bindingkey), amqp_empty_table); 9,关闭channel amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS); 10,关闭 connection连接。 // Closing connection amqp_connection_close(conn, AMQP_REPLY_SUCCESS); //Ending connection amqp_destroy_connection(conn);转载地址:http://yuhrb.baihongyu.com/