我正在尝试通过 C++ 中的 RabbitMQ 在两台计算机之间发送和接收消息。我的发件人代码如下所示:
AmqpClient::Channel::ptr_t channel = AmqpClient::Channel::Create("192.168.1.1", 5672, "test", "test", "/");
channel->DeclareQueue("rabbit", false, true, false, false);
AmqpClient::BasicMessage::ptr_t msg = AmqpClient::BasicMessage::Create("Hello Rabbit!");
channel->BasicPublish("", "rabbit", msg);
std::cout << "[x] message sent!" << std::endl;
Run Code Online (Sandbox Code Playgroud)
我在另一台具有192.168.1.1IP 地址的计算机上的接收器代码如下所示:
AmqpClient::Channel::ptr_t connection = AmqpClient::Channel::Create("localhost", 5672, "test", "test", "/");
connection->DeclareQueue("rabbit", false, true, false, false);
std::string consumer = connection->BasicConsume("rabbit", "", true, false);
while(true)
{
AmqpClient::Envelope::ptr_t envelope = connection->BasicConsumeMessage(consumer);
std::cout << "received message: " << envelope->Message()->Body() << std::endl;
std::cout << "[x] ready to receive new message..." …Run Code Online (Sandbox Code Playgroud) 如何重新配置 RabbitMQ 不使用 %appdata% 作为配置文件?
import pika
params = pika.URLParameters([URL])
connection = pika.BlockingConnection(params)
channel = connection.channel()
channel.queue_declare(queue='test', durable=True)
channel.basic_consume(do_things, queue='test')
try:
channel.start_consuming()
except KeyboardInterrupt:
channel.stop_consuming()
except:
rollbar.report_exc_info()
finally:
channel.close()
connection.close()
Run Code Online (Sandbox Code Playgroud)
这是我用来消费消息的代码。问题是,假设队列中有 100 条消息test。一旦我启动消费者,它就会获取所有100条消息并一一处理,即队列状态变为:消息就绪:0,未确认:100,总计:100。结果,我无法旋转启动新消费者并行处理这 100 条消息,因为没有为新消费者留下任何消息(所有消息均已被现有消费者获取,尽管大多数消息尚未处理)。有没有办法让消费者一次只接受1条消息?
我正在使用 Rabbitmq 3.7.2 和 Erlang 20.2 ,并且以下路径 C:\Users\vxadmin\AppData\Roaming\RabbitMQ\config 中默认缺少 RMQ 配置文件
基于我采取的步骤之后的参考 -
1 创建环境变量
RABBITMQ_CONFIG_FILE C:\Users\vxadmin\AppData\Roaming\RabbitMQ\config
2 以管理员身份打开命令提示符
并运行rabbitmq-service.bat删除,但它抛出错误“C:\ Users \ vxadmin \ AppData \ Roaming \ RabbitMQ \ config”'不被识别为内部或外部命令,可操作程序或批处理文件。
请指导我还需要设置什么才能获取 RMQ 的配置文件。
我花了几乎一天的时间在 google pub sub 文档上创建一个小应用程序。我正在考虑从rabbitMQ切换到google pub/sub。这是我的问题:
我有一个将消息推送到主题 (T) 的应用程序。我想通过订阅者进行负载共享。所以我为 T 创建了 3 个订阅者。我将所有 3 个订阅者的名称保持相同 (S),这样我就不会 3 次收到相同的消息。
我有 2 个问题:
最后,谷歌认真对待 pub/sub 吗?查看文档和公众参与,我不确定是否应该切换到 google pub/sub。
谢谢,
rabbitmq 已连接到我的端口,到目前为止一切看起来都很好,但是当我尝试在浏览器中连接到我的本地主机时,我收到此错误消息:
\n\nThe connection was reset\n\nThe connection to the server was reset while the page was loading.\n\n The site could be temporarily unavailable or too busy. Try again in a few moments.\n If you are unable to load any pages, check your computer\xe2\x80\x99s network connection.\n If your computer or network is protected by a firewall or proxy, make sure that Firefox is permitted to access the Web\nRun Code Online (Sandbox Code Playgroud)\n\n所以我做的第一件事就是查看我的rabbitmq日志,我看到了这个:
\n\n Starting RabbitMQ 3.7.9 on Erlang 20.2.2\n Copyright (C) 2007-2018 …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的 powershell 脚本中设置环境变量。
这是我的代码片段。它设置系统环境变量(系统属性>环境变量>路径)但是,我无法在powershell中启动rabbitmq-service。
'$ENV:PATH' 命令输出没有新添加的路径。系统重新启动后 $ENV:PATH 包含新路径,但命令“rabbitmq-service”仍然不起作用。
# SET Erlang and RabbitMQ Home Path
$ERLANG_HOME = "$env:PROGRAMFILES\erl9.2"
[System.Environment]::SetEnvironmentVariable("ERLANG_HOME", $ERLANG_HOME, "Machine")
$ERTS_HOME = "$env:PROGRAMFILES\erts-9.2"
[System.Environment]::SetEnvironmentVariable("ERTS_HOME", $ERTS_HOME, "Machine")
$RABBITMQ_HOME = "$env:PROGRAMFILES\RabbitMQ Server\rabbitmq_server-3.6.11"
[System.Environment]::SetEnvironmentVariable("RABBITMQ_HOME", $RABBITMQ_HOME, "Machine")
# Add Erlang and RabbitMQ to Path
$System_Path_Elems = [System.Environment]::GetEnvironmentVariable("PATH", "Machine").Split(";")
if (!$System_Path_Elems.Contains("$RABBITMQ_HOME\sbin") -and !$System_Path_Elems.Contains("$ERLANG_HOME\bin") -and !$System_Path_Elems.Contains("$ERTS_HOME\bin"))
{
$newPath = [System.String]::Join(";", $System_Path_Elems + "$ERLANG_HOME\bin" + "$ERTS_HOME\bin" + "$RABBITMQ_HOME\sbin")
[System.Environment]::SetEnvironmentVariable("PATH", $newPath, "Machine")
}
Run Code Online (Sandbox Code Playgroud)
如果我在我的脚本中使用 $env:PATH 设置 PATH,它会起作用。
$env:Path += ";C:\\Program Files\\erl9.2\\erts-9.2\\bin;
C:\\Program Files\\RabbitMQ Server\\rabbitmq_server-3.6.11\\sbin;C:\\Program Files\\erl9.2\\bin"
Run Code Online (Sandbox Code Playgroud)
我能够毫无问题地执行以下命令。
rabbitmq-service …Run Code Online (Sandbox Code Playgroud) 我正在创建一个类,用于Producer将消息推送到RabbitMQ. 它利用pika module. 我想创建一个处理程序,以便我可以控制与 Rabbit MQ 交互的连接数量。
有没有一种方法可以将其添加到其中app_context并稍后引用它,或者有没有一种方法可以用来init_app定义此处理程序。
任何代码片段都会有很大的帮助。
我犯了一个错误:现在两个队列都明确绑定到某个交换,我可以为每个队列进行编辑。这些队列之一必须绑定到默认交换。现在,当我尝试将该队列的交换更改为空字符串时,它会引发异常:
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=403, reply-text=ACCESS_REFUSED - operation not permitted on the default exchange, class-id=<..>, method-id=<..>)
我可以将一些特定值传递给方法 com.rabbitmq.client.Channel#queueBind 将队列绑定到 defaultChange 吗?我使用Java RabbitMQ客户端库5.6.0
我正在使用 VueJS 构建一个 Web 应用程序。应用程序应充当消息生产者并将消息发送到 RabbitMQ。是否有关于如何实现组件的最佳实践?
编辑:我相信这个问题还没有解决,RabbitMQ 允许使用 AMQP 以外的协议进行 Websocket 连接,即使用 RabbitMQ 团队编写的插件支持 MQTT 和 STOMP。
这些插件支持 websocket 传输协议并支持使用这些消息传递协议进行操作。
来源: https: //www.rabbitmq.com/web-mqtt.html