博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RabbitMQ服务客户端的的业务逻辑
阅读量:2493 次
发布时间:2019-05-11

本文共 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/

你可能感兴趣的文章
Java中equals和==的区别
查看>>
JVM内存管理及GC机制
查看>>
Java:按值传递还是按引用传递详细解说
查看>>
Java中Synchronized的用法
查看>>
阻塞队列
查看>>
linux的基础知识
查看>>
接口技术原理
查看>>
五大串口的基本原理
查看>>
PCB设计技巧与注意事项
查看>>
linux进程之间通讯常用信号
查看>>
main函数带参数
查看>>
PCB布线技巧
查看>>
关于PCB设计中过孔能否打在焊盘上的两种观点
查看>>
PCB反推理念
查看>>
京东技术架构(一)构建亿级前端读服务
查看>>
php 解决json_encode中文UNICODE转码问题
查看>>
LNMP 安装 thinkcmf提示404not found
查看>>
PHP empty、isset、innull的区别
查看>>
apache+nginx 实现动静分离
查看>>
通过Navicat远程连接MySQL配置
查看>>