rabbitmq 开启远程访问并接受消息

https://blog.csdn.net/leftfist/article/details/142586651

sudo rabbitmq-plugins enable rabbitmq_management
sudo rabbitmq-plugins enable rabbitmq_stomp

 

#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 = "192.168.1.3";  // 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;
	}

	// 登录 RabbitMQ
	die_on_error(amqp_login(conn, "/", 0, 15672, 0, AMQP_SASL_METHOD_PLAIN, "test", "test"), "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;
}

posted @ 2025-05-02 22:03  微笑的''80  阅读(7)  评论(0)    收藏  举报