为什么我不能在rabbitmq在Windows中创建队列?

mo49yndu  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(3)|浏览(222)

我是RabbitMQ的新手。
我在Windows 10上安装了RabbitMQ服务器。我可以在网页浏览器中登录到服务器。当我运行下面的客户端代码(使用AMQP-CPP库)时,既没有调用channel.onSuccess也没有调用channel.onError。而且,我在网页浏览器中看不到我声明的my-queue队列和my-exchange交换。
如果我没理解错的话,我需要添加一些事件循环(?)。但是,我找不到任何Windows的例子。你能解释一下是什么问题吗?

int main()
{
    // create an instance of your own tcp handler
    MyTcpHandler myHandler;

    // address of the server
    //AMQP::Address address("amqp://guest:guest@localhost:5672/");
    AMQP::Address address("localhost", 15672, AMQP::Login("guest", "guest"), "");

    // create a AMQP connection object
    AMQP::TcpConnection connection(&myHandler, address);

    // and create a channel b
    AMQP::TcpChannel channel(&connection);

    // use the channel object to call the AMQP method you like
    channel.declareExchange("my-exchange", AMQP::fanout)
        .onSuccess([]()
    {
        std::cout << "declared exchange " << std::endl;
    }).onError([](const char *message)
    {
        std::cout << "error: " << message << std::endl;

    });

    channel.declareQueue("my-queue");
    channel.bindQueue("my-exchange", "my-queue", "my-routing-key");

    std::cout << "Press Enter..." << std::endl;
    std::getchar();

    return 0;
}

我的TCP处理程序

class MyTcpHandler : public AMQP::TcpHandler
{
public:

    virtual void onConnected(AMQP::TcpConnection *connection) {}
    virtual void onError(AMQP::TcpConnection *connection, const char *message) {}
    virtual void onClosed(AMQP::TcpConnection *connection) {}
    virtual void monitor(AMQP::TcpConnection *connection, AMQP::tcp::Socket fd, int flags) {}
};
x4shl7ld

x4shl7ld1#

我今天也遇到了同样问题
问题是你必须实现你自己的handler,否则什么都不会发送。
捆绑的TcpHandler基于boost asio tcpHandler,它仅为posix,不会在windows上编译。请参见此链接
太可惜了,它没有内部内置的处理程序,这是如此“基本”...

wmvff8tz

wmvff8tz2#

您连接的端口错误,15672是管理插件端口,您需要连接的端口为5672,这是AMQP端口
请按以下内容更正代码

AMQP::Address address("localhost", 5672, AMQP::Login("guest", "guest"), "");
dphi5xsq

dphi5xsq3#

你可以使用下面的代码使用HareDu 2 Broker API来完成它。https://github.com/ahives/HareDu2

var result = _container.Resolve<IBrokerObjectFactory>()
                .Object<Queue>()
                .Create(x =>
                {
                    x.Queue("your_queue");
                    x.Configure(c =>
                    {
                        c.IsDurable();
                        c.AutoDeleteWhenNotInUse();
                        c.HasArguments(arg =>
                        {
                            arg.SetQueueExpiration(1000);
                            arg.SetPerQueuedMessageExpiration(2000);
                        });
                    });
                    x.Targeting(t =>
                    {
                        t.VirtualHost("your_vhost");
                        t.Node("your_node");
                    });
                });

相关问题