24,854
社区成员
发帖
与我相关
我的任务
分享
char const *hostname;
int port, status;
char const *exchange;
char const *bindingkey;
amqp_socket_t *socket = NULL;
amqp_connection_state_t conn;
amqp_bytes_t queuename;
//if (argc < 5) {
// fprintf(stderr, "Usage: amqp_listen host port exchange bindingkey\n");
// return 1;
//}
/*hostname = argv[1];
port = atoi(argv[2]);
exchange = argv[3];
bindingkey = argv[4];*/
hostname = "192.168.10.248";
port = 15672;
exchange = "amq.direct";
bindingkey = "test";
conn = amqp_new_connection();
socket = amqp_tcp_socket_new(conn);
if (!socket) {
die("creating TCP socket");
}
status = amqp_socket_open(socket, hostname, port);
if (status) {
die("opening TCP socket");
}
die_on_amqp_error(amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"),
"Logging in");
amqp_channel_open(conn, 1);
die_on_amqp_error(amqp_get_rpc_reply(conn), "Opening channel");
bool MQProcessing:: Publish(const string& queuename,int channel,const string& msg)
{
char const *hostname = m_strHostName.c_str();
int status;
char const *exchange = m_strExchange.c_str();
char const *routingkey = m_strRoutingkey.c_str();
char const *messagebody = msg.c_str();
amqp_socket_t *socket = NULL;
amqp_connection_state_t conn;
conn = amqp_new_connection();
socket = amqp_tcp_socket_new(conn);
if (!socket) {
return die(_communicator,"creating TCP socket");
}
status = amqp_socket_open(socket, hostname, m_iPort);
//const char* hh = amqp_error_string(status);
if (status) {
return die(_communicator,"opening TCP socket failed,socket closed");
}
//int sockfd;
//die_on_error(_communicator,sockfd = amqp_open_socket(hostname, m_iPort), "Opening socket");
//amqp_set_sockfd(conn, sockfd);
if (
!die_on_amqp_error(_communicator,amqp_login(conn, "/", 0, 131072, 0, AMQP_SASL_METHOD_PLAIN, "guest", "guest"),
"Logging in")
)
{
return false;
}
amqp_channel_open(conn, channel);
if (
!die_on_amqp_error(_communicator,amqp_get_rpc_reply(conn), "Opening channel")
)
{
return false;
}
{
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; /* persistent delivery mode */
if (
!die_on_error(_communicator,amqp_basic_publish(conn,
channel,
amqp_cstring_bytes(exchange),
amqp_cstring_bytes(routingkey),
0,
0,
&props,
amqp_cstring_bytes(messagebody)),
"Publishing")
)
{
return false;
}
}
if (!die_on_amqp_error(_communicator,amqp_channel_close(conn, channel, AMQP_REPLY_SUCCESS), "Closing channel"))
{
return false;
}
if (!die_on_amqp_error(_communicator,amqp_connection_close(conn, AMQP_REPLY_SUCCESS), "Closing connection"))
{
return false;
}
if (!die_on_error(_communicator,amqp_destroy_connection(conn), "Ending connection"))
{
return false;
}
return true;
}