当前位置: 首页 > wzjs >正文

深圳市国外网站建设服务机构美食网站的设计与实现

深圳市国外网站建设服务机构,美食网站的设计与实现,万网网站购买,wordpress幻灯片满屏1. 安装RabbitMQ服务器 在Windows上:先安装Erlang,再安装RabbitMQ服务器。安装完成后,可通过访问http://localhost:15672来检查RabbitMQ服务器是否正常运行,默认的用户名和密码是guest/guest。 在Linux上:可使用包管理…

1. 安装RabbitMQ服务器

  • 在Windows上:先安装Erlang,再安装RabbitMQ服务器。安装完成后,可通过访问http://localhost:15672来检查RabbitMQ服务器是否正常运行,默认的用户名和密码是guest/guest

  • 在Linux上:可使用包管理器安装,如在Ubuntu上可使用命令sudo apt-get install --no-install-recommends rabbitmq-server,然后启动和启用RabbitMQ Server,并安装管理插件。

2. 安装librabbitmq库

  • 在Windows上:通过vcpkg安装librabbitmq库。首先克隆vcpkg仓库,然后运行安装脚本,接着使用vcpkg安装librabbitmq,并将vcpkg集成到项目中。

  • 在Linux上:可从RabbitMQ-C的官方GitHub仓库获取源代码,然后编译并安装依赖。

3. 配置C++项目

  • 在Visual Studio中创建新的C++项目,并确保项目中包含了vcpkg的安装路径。vcpkg会自动配置项目,使其能够找到并链接到librabbitmq库。

4. 编写代码实现消息发送和接收

发送消息的程序(Producer)
#include <iostream>
#include <string>
#include <amqp.h>
#include <amqp_tcp_socket.h>
#include <thread>
#include <chrono>// 用于处理 AMQP 错误并输出错误信息
void die_on_error(amqp_rpc_reply_t x, const char* context) {if (x.reply_type != AMQP_RESPONSE_NORMAL) {std::cerr << "Error in " << context << ": "<< amqp_error_string2(x.library_error) << std::endl;exit(1);}
}int main() {const std::string hostname = "localhost";  // RabbitMQ 服务器地址const int port = 5672;  // RabbitMQ 默认端口const std::string exchange = "example_exchange";  // 交换机名称const std::string routing_key = "example_key";  // 路由键,用于绑定队列// 初始化连接amqp_connection_state_t conn = amqp_new_connection();amqp_socket_t* socket = amqp_tcp_socket_new(conn);if (!socket) {std::cerr << "Creating TCP socket failed" << std::endl;return 1;}// 打开 TCP 连接int status = amqp_socket_open(socket, hostname.c_str(), port);if (status) {std::cerr << "Opening TCP socket failed" << std::endl;return 1;}// 登录 RabbitMQdie_on_error(amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"), "Logging in");amqp_channel_open(conn, 1);  // 打开信道die_on_error(amqp_get_rpc_reply(conn), "Opening channel");// 声明交换机(类型为 direct)amqp_exchange_declare(conn, 1, amqp_cstring_bytes(exchange.c_str()), amqp_cstring_bytes("direct"),0, 0, 0, 0, amqp_empty_table);die_on_error(amqp_get_rpc_reply(conn), "Declaring exchange");// 循环发送多条消息for (int i = 1; i <= 1000; ++i) {  // 发送 1000 条消息std::string message = "Hello, RabbitMQ! Message number: " + std::to_string(i);amqp_bytes_t message_bytes = amqp_cstring_bytes(message.c_str());// 设置消息属性amqp_basic_properties_t props;props._flags = AMQP_BASIC_CONTENT_TYPE_FLAG | AMQP_BASIC_DELIVERY_MODE_FLAG;props.content_type = amqp_cstring_bytes("text/plain");props.delivery_mode = 2;  // 持久化模式// 发送消息到交换机int result = amqp_basic_publish(conn, 1, amqp_cstring_bytes(exchange.c_str()), amqp_cstring_bytes(routing_key.c_str()),0, 0, &props, message_bytes);if (result < 0) {std::cerr << "Error publishing message " << i << std::endl;} else {std::cout << "Message " << i << " published: " << message << std::endl;}// 每次发送后等待 1 秒std::this_thread::sleep_for(std::chrono::seconds(1));}// 清理连接amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS);amqp_connection_close(conn, AMQP_REPLY_SUCCESS);amqp_destroy_connection(conn);return 0;
}

接收消息的程序(Consumer) 

#include <iostream>
#include <string>
#include <amqp.h>
#include <amqp_tcp_socket.h>void die_on_error(amqp_rpc_reply_t x, const char* context) {if (x.reply_type != AMQP_RESPONSE_NORMAL) {std::cerr << "Error in " << context << ": "<< amqp_error_string2(x.library_error) << std::endl;exit(1);}
}int main() {const std::string hostname = "localhost";  // RabbitMQ 服务器地址const int port = 5672;  // RabbitMQ 默认端口const std::string exchange = "example_exchange";  // 交换机名称const std::string routing_key = "example_key";  // 路由键const std::string queue_name = "example_queue";  // 队列名称amqp_connection_state_t conn = amqp_new_connection();amqp_socket_t* socket = amqp_tcp_socket_new(conn);if (!socket) {std::cerr << "Creating TCP socket failed" << std::endl;return 1;}int status = amqp_socket_open(socket, hostname.c_str(), port);if (status) {std::cerr << "Opening TCP socket failed" << std::endl;return 1;}die_on_error(amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"), "Logging in");amqp_channel_open(conn, 1);die_on_error(amqp_get_rpc_reply(conn), "Opening channel");// 声明交换机amqp_exchange_declare(conn, 1, amqp_cstring_bytes(exchange.c_str()), amqp_cstring_bytes("direct"),0, 0, 0, 0, amqp_empty_table);die_on_error(amqp_get_rpc_reply(conn), "Declaring exchange");// 声明队列amqp_queue_declare_ok_t* r = amqp_queue_declare(conn, 1, amqp_cstring_bytes(queue_name.c_str()), 0, 0, 0, 0, amqp_empty_table);die_on_error(amqp_get_rpc_reply(conn), "Declaring queue");// 绑定队列到交换机amqp_queue_bind(conn, 1, amqp_cstring_bytes(queue_name.c_str()), amqp_cstring_bytes(exchange.c_str()), amqp_cstring_bytes(routing_key.c_str()), amqp_empty_table);die_on_error(amqp_get_rpc_reply(conn), "Binding queue");// 开始消费消息amqp_basic_consume(conn, 1, amqp_cstring_bytes(queue_name.c_str()), amqp_empty_bytes, 0, 1, 0, amqp_empty_table);std::cout << "Waiting for messages. To exit press CTRL+C" << std::endl;while (true) {amqp_rpc_reply_t res = amqp_simple_wait_for_event(conn);if (res.reply_type == AMQP_RESPONSE_NORMAL) {amqp_envelope_t envelope;amqp_maybe_release_buffers(conn);if (amqp_consume_message(conn, &envelope, NULL, 0) == AMQP_STATUS_OK) {std::cout << "Received message: " << amqp_bytes_to_string(envelope.message.body, NULL) << std::endl;amqp_destroy_envelope(&envelope);}} else {die_on_error(res, "Waiting for event");}}amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS);amqp_connection_close(conn, AMQP_REPLY_SUCCESS);amqp_destroy_connection(conn);return 0;
}

5. 编译和运行项目

  • 在Windows上,使用Visual Studio编译和运行项目。

  • 在Linux上,使用g++编译器进行编译,并链接相应的库文件。

以上步骤提供了在C++中引入RabbitMQ的基本流程,包括安装服务器、安装客户端库、配置项目、编写代码以及编译运行等。通过这些步骤,你可以在C++项目中实现与RabbitMQ服务器的消息通信。

 


文章转载自:

http://PTvRnMW4.nyhtf.cn
http://dP95jrGE.nyhtf.cn
http://gfI3MqKv.nyhtf.cn
http://ddgASg4h.nyhtf.cn
http://qiUqX9Jx.nyhtf.cn
http://mexP096A.nyhtf.cn
http://bOH5eh9e.nyhtf.cn
http://HtL1T6Dr.nyhtf.cn
http://xJeSLo2E.nyhtf.cn
http://jvY0Lige.nyhtf.cn
http://fORWersc.nyhtf.cn
http://zeNhQWgO.nyhtf.cn
http://HQmzkIG2.nyhtf.cn
http://whW68oZI.nyhtf.cn
http://dD2uTyKr.nyhtf.cn
http://f28yUqUd.nyhtf.cn
http://zzlJnt58.nyhtf.cn
http://AmAr9Szw.nyhtf.cn
http://DZfh02dv.nyhtf.cn
http://t1hwljFg.nyhtf.cn
http://WxjujNZH.nyhtf.cn
http://FFFzFgKd.nyhtf.cn
http://trTTJiNf.nyhtf.cn
http://JbJvCbo0.nyhtf.cn
http://T5QIzW0g.nyhtf.cn
http://Tp1AFJxR.nyhtf.cn
http://trD3ygBx.nyhtf.cn
http://aMRAgpzK.nyhtf.cn
http://uV5MuvZw.nyhtf.cn
http://g1n5VygE.nyhtf.cn
http://www.dtcms.com/wzjs/778792.html

相关文章:

  • 山东住房和建设庭官网站官黑帽seo技术
  • 网站开发进度计划是什么做网站按页面收费
  • 负责网站建设和网络推广的wordpress主题插件下载失败
  • 小吃店网站建设云浮+网站建设
  • 云空间提供网站华为的网络营销方式
  • 手机微信网站建设销售平台网站建设方案模板
  • 怎么样在网上建设网站挣钱服装网站模板免费下载
  • 新乡微信网站建设wordpress 邮件文本
  • wordpress网站怎么打开很慢互联网传媒公司
  • 做国外夏令营的网站保定涿州网站建设
  • 扬州哪里做网站好网站的目标定位有哪些
  • 平台网站建设方案模板下载自己如何创立网站
  • 深圳企业网站托管青海网站建设系统
  • 专业做网站多少钱卖东西的网站怎么做
  • 软件公司网站素材wordpress ip设置
  • 网站建设实验分析上海装修公司排名榜
  • 大连庄河网站建设平顶山网站建设费用
  • android 移动网站开发网页制作基础教程视频教程 葛艳玲
  • 基层建设被哪些网站全文收录查域名解析ip
  • 网站建设推广谷得网络免费建站网站一级大录像不卡在线看网页
  • 宜昌做网站哪家最便宜wordpress自带jquery
  • 大连住建部官方网站如何做音乐分享类网站
  • 做网站的模仿还要去量宽高吗初中毕业学网站开发工程师
  • 医院网站建设报价做商城外贸网站
  • 做盗版小说网站赚钱嘛做封面电脑网站
  • 吉安做网站公司番禺网站制作价格
  • 网站建设计划书怎么写城乡建设部网站混凝土7天强度
  • 社交类网站开发需求分析惠东做网站报价
  • 局域网网站开发只做动漫的h网站
  • 医院网站竹子建站免费版