RabbitMQ服务客户端的的业务逻辑
生活随笔
收集整理的這篇文章主要介紹了
RabbitMQ服务客户端的的业务逻辑
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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);
????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);
總結
以上是生活随笔為你收集整理的RabbitMQ服务客户端的的业务逻辑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DNS术语,组件和概念介绍
- 下一篇: ftruncate函数的功能及使用