### 回答1:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <amqp.h>
#include <amqp_tcp_socket.h>
int main(int argc, char *argv[])
{
char const *hostname;
int port, status;
char const *exchange;
char const *bindingkey;
amqp_socket_t *socket = NULL;
amqp_connection_state_t conn;
hostname = "localhost";
port = 5672;
exchange = "amq.topic";
bindingkey = "hello";
conn = amqp_new_connection();
socket = amqp_tcp_socket_new(conn);
if (!socket) {
printf("Error creating TCP socket\n");
return -1;
}
status = amqp_socket_open(socket, hostname, port);
if (status) {
printf("Error opening TCP socket\n");
return -1;
}
amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest");
amqp_channel_open(conn, 1);
amqp_get_rpc_reply(conn);
amqp_exchange_declare(conn, 1, amqp_cstring_bytes(exchange), amqp_cstring_bytes("topic"), 0, 0, 0, 0, amqp_empty_table);
amqp_get_rpc_reply(conn);
amqp_basic_publish(conn, 1, amqp_cstring_bytes(exchange), amqp_cstring_bytes(bindingkey), 0, 0, NULL, "Hello World!");
amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS);
amqp_connection_close(conn, AMQP_REPLY_SUCCESS);
amqp_destroy_connection(conn);
return 0;
}我已经写好了一段代码,可以实现 RabbitMQ 发布模式。它使用 C 语言编写,你可以根据自己的需求来改进它。
### 回答2:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <rabbitmq-c/rabbitmq.h>
#define QUEUE_NAME "my_queue"
#define MESSAGE "Hello, RabbitMQ!"
int main() {
// 建立连接
amqp_connection_state_t conn;
conn = amqp_new_connection();
// 打开通道
amqp_socket_t *socket = amqp_tcp_socket_new(conn);
amqp_socket_open(socket, "localhost", 5672);
// 登录认证
amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest");
amqp_channel_open(conn, 1);
amqp_get_rpc_reply(conn);
// 声明一个持久化的队列
amqp_queue_declare(conn, 1, amqp_cstring_bytes(QUEUE_NAME), 0, 1, 0, 0, amqp_empty_table);
amqp_get_rpc_reply(conn);
// 发布消息
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; // 持久化消息
amqp_basic_publish(conn, 1, amqp_cstring_bytes(""), amqp_cstring_bytes(QUEUE_NAME), 0, 0, &props,
amqp_cstring_bytes(MESSAGE));
amqp_get_rpc_reply(conn);
// 关闭通道
amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS);
amqp_get_rpc_reply(conn);
// 关闭连接
amqp_connection_close(conn, AMQP_REPLY_SUCCESS);
amqp_destroy_connection(conn);
return 0;
}
### 回答3:
RabbitMQ是一种广泛使用的消息队列中间件,它支持多种消息传输模式,包括发布/订阅(Publish/Subscribe)模式。在C语言中,我们可以使用RabbitMQ的C客户端库来编写一个发布模式的代码示例。
首先,我们需要安装RabbitMQ的C客户端库,并通过头文件引入相关函数和结构体。接下来,我们可以创建一个发布者(publisher)的代码,用于向RabbitMQ发送消息。
下面是一个简单的RabbitMQ发布模式的代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <amqp.h>
int main() {
// 连接到RabbitMQ服务器
amqp_connection_state_t conn = amqp_new_connection();
amqp_socket_t* socket = amqp_tcp_socket_new(conn);
amqp_socket_open(socket, "localhost", 5672);
// 创建一个通道
amqp_channel_open(conn, 1);
amqp_get_rpc_reply(conn);
// 创建一个交换机,用于消息发布
amqp_exchange_declare(conn, 1, amqp_cstring_bytes("my_exchange"), amqp_cstring_bytes("fanout"), false, true, false, false, amqp_empty_table);
// 发布消息
const char* message = "Hello, RabbitMQ!";
amqp_basic_publish(conn, 1, amqp_cstring_bytes("my_exchange"), amqp_cstring_bytes(""), 0, 0, NULL, amqp_cstring_bytes(message));
// 关闭通道和连接
amqp_channel_close(conn, 1, AMQP_REPLY_SUCCESS);
amqp_connection_close(conn, AMQP_REPLY_SUCCESS);
amqp_destroy_connection(conn);
return 0;
}
```
以上代码中,我们首先通过`amqp_connection_state_t`类型的`conn`变量创建RabbitMQ连接,并通过`amqp_tcp_socket_new`函数创建一个TCP socket与RabbitMQ服务器建立连接。接下来,我们通过`amqp_channel_open`函数创建一个通道,并使用`amqp_exchange_declare`函数声明一个名为`my_exchange`的交换机,用于消息的发布。然后,我们调用`amqp_basic_publish`函数发布一条消息到交换机。
最后,通过`amqp_channel_close`和`amqp_connection_close`函数关闭通道和连接,并通过`amqp_destroy_connection`函数释放连接资源。
这是一个基本的RabbitMQ发布模式的示例代码。根据实际需求,你可以进一步扩展代码,添加错误处理和异常情况的处理逻辑。