C/C++笔记-使用RabbitMQ的C接口生产数据并消费
目錄
?
?
基本概念
代碼與實例
?
基本概念
使用C語言接口完成官方的這個模型:
很有意思。感覺開源的東西真的好,不用自己去寫C/C++服務端。
p為生產者不經過交換機,直接把數據傳給消息隊列,c為consumer用于消費。
這種結構在本科生的時候,經常自己寫,現在用RabbitMQ來試試
?
?
代碼與實例
這里有套Java的代碼,其實C接口和Java接口差不多。因為本人C/C++寫得多。個人覺得比Java好用,但資料很少。只能慢慢啃官方實例和教程。這一點沒有Java快。
Java版鏈接如下:https://blog.csdn.net/qq78442761/article/details/93045595
C語言版,程序運行如下:
其中RabbitMQ如下:
producter源碼:
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <amqp.h> #include <amqp_framing.h> #include <amqp_tcp_socket.h> using namespace std;int main(int *argc, int *argv[]){string hostName = "127.0.0.1";int port = 5672;amqp_socket_t *socket = nullptr;amqp_connection_state_t conn;conn = amqp_new_connection();socket = amqp_tcp_socket_new(conn);if(!socket){cout << "create socket failed!";exit(1);}if(amqp_socket_open(socket, hostName.c_str(), port)){cout << "opening TCP socket failed" << endl;exit(1);}//登錄if(1 != amqp_login(conn, "/vhost_cff", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "cff", "123").reply_type){cout << "login failed" << endl;}//管道amqp_channel_open(conn, 1);while(1){char message[64] = {'\0'};cout << "please input the msg: ";cin.getline(message, sizeof(message));amqp_bytes_t message_bytes;message_bytes.len = sizeof(message);message_bytes.bytes = message;amqp_basic_publish(conn, 1, amqp_cstring_bytes(""), amqp_cstring_bytes("test_simple_queue"), 0, 0, nullptr, message_bytes);cout << "send msg over!" << endl;}getchar();return 0; }consumer源碼:
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <amqp.h> #include <amqp_framing.h> #include <amqp_tcp_socket.h> using namespace std;int main(int *argc, int *argv[]){string hostName = "127.0.0.1";int port = 5672;amqp_socket_t *socket = nullptr;amqp_connection_state_t conn;conn = amqp_new_connection();socket = amqp_tcp_socket_new(conn);if(!socket){cout << "create socket failed!";exit(1);}if(amqp_socket_open(socket, hostName.c_str(), port)){cout << "opening TCP socket failed" << endl;exit(1);}//登錄if(1 != amqp_login(conn, "/vhost_cff", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "cff", "123").reply_type){cout << "login failed" << endl;exit(1);}amqp_channel_open(conn, 1);while(1){amqp_basic_consume_ok_t *msg = amqp_basic_consume(conn, 1, amqp_cstring_bytes("test_simple_queue"), amqp_empty_bytes, 0, 1, 0, amqp_empty_table);amqp_envelope_t envelope;amqp_consume_message(conn, &envelope, NULL, 0);cout << "The result is : " << (char *)envelope.message.body.bytes << endl;}getchar();return 0; }這里只要把amqp_basic_xxxx中關于交換機和路由key設置為空,就可以直接發送到隊列上,不需要經過交換機。也就是官方的這個模型
使用amqp_queue_declare這個函數可以聲明一個隊列,也就是當RabbitMQ沒有隊列的時候,會自動生成一個。在本實驗中沒有用到這個。
總體來說實現功能還是比較簡單的,但寫好一個程序還是有難度的。
?
源碼打包下載:
https://github.com/fengfanchen/CAndCPP/tree/master/SampleRabbitMQ
?
總結
以上是生活随笔為你收集整理的C/C++笔记-使用RabbitMQ的C接口生产数据并消费的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Qt文档阅读笔记-Multiple In
- 下一篇: C++笔记-const与mutable、
