RabbitMQ流控测试客户端代码

匿名 (未验证) 提交于 2019-12-03 00:25:02
#include "amqp_tcp_socket.h" #include "amqp.h" #include "amqp_framing.h"  #include <unistd.h> #include <string.h> #include <sys/select.h>  #include <string>  using namespace std;  // g++ -o rabbitmq_producer -g -Wall -Werror -Winline -Wwrite-strings -D RABBITMQ_CLIENT_PRODUCER -std=c++11  rabbitmq-client.cpp  -I ../librabbitmq/  ./librabbitmq/librabbitmq.a  -lrt // g++ -o rabbitmq_consumer -g -Wall -Werror -Winline -Wwrite-strings -D RABBITMQ_CLIENT_CONSUMER -std=c++11  rabbitmq-client.cpp  -I ../librabbitmq/  ./librabbitmq/librabbitmq.a  -lrt   unsigned int period = 3600; unsigned int speed = 1;  string m_strIp          = "192.168.45.131"; int m_uPort             = 5672; string m_strUserName    = "admin"; string m_strPassWord    = "admin123";  string m_strVHost       = "test_host"; string m_strExchange    = "test_exchange"; string m_strRoutingKey  = "test_routing-key"; string m_strQueue       = "test_queue";  unsigned int channel_id     = 100; unsigned int prefetch_count = 2000;  amqp_connection_state_t m_MQconn; amqp_basic_properties_t m_Props;  unsigned int count_ = 0; unsigned int loop_ = 0; struct timeval delay_;  bool connect_rabbitmq() {     m_MQconn = amqp_new_connection();      if (NULL == m_MQconn)     {         printf("Call amqp_new_connection failed.\n");         return false;     }      amqp_socket_t* pSocket = amqp_tcp_socket_new(m_MQconn);      if (NULL == pSocket)     {         printf("Call amqp_tcp_socket_new failed.\n");         return false;     }      int iStatus = amqp_socket_open(pSocket, m_strIp.data(), m_uPort);      if (iStatus < 0)     {         printf("Call amqp_socket_open failed.\n");         return false;     }      amqp_rpc_reply_t rLonin = amqp_login(m_MQconn,                                             m_strVHost.data(),                                             0,                                             131072,                                             0,                                             AMQP_SASL_METHOD_PLAIN,                                             m_strUserName.data(),                                             m_strPassWord.data());      if (AMQP_RESPONSE_NORMAL != rLonin.reply_type)     {         printf("Call amqp_login failed. reply_type:%d.\n", rLonin.reply_type);         return false;     }      amqp_channel_open(m_MQconn, channel_id);      amqp_rpc_reply_t rOpenChannel =  amqp_get_rpc_reply(m_MQconn);      if (AMQP_RESPONSE_NORMAL != rOpenChannel.reply_type)     {         printf("Call amqp_channel_open failed. reply_type:%d.\n", rOpenChannel.reply_type);         return false;     }      m_Props._flags = AMQP_BASIC_CONTENT_TYPE_FLAG | AMQP_BASIC_DELIVERY_MODE_FLAG;     m_Props.content_type = amqp_cstring_bytes("text/plain");     m_Props.delivery_mode = 2;      #if defined(RABBITMQ_CLIENT_CONSUMER)      amqp_basic_qos(m_MQconn, channel_id, 0, prefetch_count, 0);      amqp_rpc_reply_t rSetQos = amqp_get_rpc_reply(m_MQconn);      if (AMQP_RESPONSE_NORMAL != rSetQos.reply_type)     {         printf("Call amqp_basic_qos failed. reply_type:%d.\n", rSetQos.reply_type);         return false;     }      amqp_basic_consume(m_MQconn,                         channel_id,                         amqp_cstring_bytes(m_strQueue.data()),                         amqp_cstring_bytes(to_string(channel_id).data()),                         0,                         0,                         0,                         amqp_empty_table);      amqp_rpc_reply_t rConsume = amqp_get_rpc_reply(m_MQconn);      if (AMQP_RESPONSE_NORMAL != rConsume.reply_type)     {         printf("Call amqp_basic_consume failed. reply_type:%d.\n", rConsume.reply_type);         return false;     }     #endif      printf("connect rabbitmq success.\n");     return true; }  bool close_rabbitmq() {     amqp_channel_close(m_MQconn, 1, AMQP_REPLY_SUCCESS);     amqp_connection_close(m_MQconn, AMQP_REPLY_SUCCESS);     int ret = amqp_destroy_connection(m_MQconn);      if (AMQP_STATUS_OK != ret)     {         printf("Call amqp_destroy_connection failed. retcode:%d.\n", ret);         return false;     }      return true; }  bool base_publish(const string& strData) {     int iRet = amqp_basic_publish(m_MQconn,                                     channel_id,                                     amqp_cstring_bytes(m_strExchange.data()),                                     amqp_cstring_bytes(m_strRoutingKey.data()),                                     0,                                     0,                                     &m_Props,                                     amqp_cstring_bytes(strData.data()));     if (iRet < 0)     {         printf("Call amqp_basic_publish failed. return code:%d.\n", iRet);         close_rabbitmq();         return false;     }      return true; }  int base_consumer() {     amqp_maybe_release_buffers(m_MQconn);     amqp_envelope_t envelope;      amqp_rpc_reply_t ret = amqp_consume_message(m_MQconn, &envelope, NULL, 0);      switch (ret.reply_type)     {         case AMQP_RESPONSE_NORMAL:         {             break;         }          case AMQP_RESPONSE_LIBRARY_EXCEPTION:         {             if (ret.library_error == AMQP_STATUS_TIMEOUT)             {                 printf("Call amqp_consume_message [-0x%x:%s].\n",                     0 - ret.library_error,                     amqp_error_string2(ret.library_error));                  amqp_destroy_envelope(&envelope);                 return false;             }             else             {                 printf("Call amqp_consume_message [-0x%x:%s].\n",                     0 - ret.library_error,                     amqp_error_string2(ret.library_error));                  amqp_destroy_envelope(&envelope);                 return false;             }         }          default:         {             printf("Call amqp_consume_message failed. "                 "ret.reply_type[%d] ret.reply.id[%x] ret.library_error[-0x%x:%s].\n",                 ret.reply_type,                 ret.reply.id,                 0 - ret.library_error,                 amqp_error_string2(ret.library_error));              amqp_destroy_envelope(&envelope);             return false;         }     }      int result = amqp_basic_ack(m_MQconn,                                 envelope.channel,                                 envelope.delivery_tag,                                 0);     if (result != 0)     {         printf("Call amqp_basic_ack failed.\n");         return false;     }      amqp_destroy_envelope(&envelope);     return true; }  void publish() {     string str = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";      for (unsigned int i = 0; i < period; ++i)     {         for (unsigned int j = 0; j < loop_; ++j)         {             if (!base_publish(str))             {                 return;             }             else             {                 count_++;                 printf("publish message success %u--------------count:%u.\n", j, count_);             }              struct timeval delay = delay_;             select(0, NULL,NULL, NULL, &delay);         }          printf("---%u seconds---\n", i);     } }  void consume() {     for (unsigned int i = 0; i < period; ++i)     {         for (unsigned int j = 0; j < loop_; ++j)         {             if (!base_consumer())             {             }             else             {                 count_++;                 printf("consumer message success %u--------------count:%u.\n", j, count_);             }              struct timeval delay = delay_;             select(0, NULL,NULL, NULL, &delay);         }         printf("---%u seconds---\n", i);     } }  int main(int argc, char* argv[]) {     if (argc != 2)     {         printf("Argument error.\n");         return -1;     }      speed = atoi(argv[1]);     loop_ = speed;     delay_.tv_usec = (1000 / speed ) * 1000;      connect_rabbitmq();      #if defined(RABBITMQ_CLIENT_PRODUCER)     publish();     #endif      #if defined(RABBITMQ_CLIENT_CONSUMER)     consume();     #endif      return 0; }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!