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);

你可能感兴趣的:(rabbitMQ)