使用 Mass Transit 和 RabbitMQ 设置对远程端点发布的消息的订阅的建议方法是什么?
在我们的例子中,大多数发布/订阅都是本地的,但对于我们的开发人员来说,订阅远程计算机上的共享发布者会很方便。
我看到的所有示例似乎都是本地的:http://docs.masstransit-project.com/en/latest/configuration/sub_config_api.html
看起来 RabbitMQ 联邦可能是一个选择,但看起来比我们需要的更复杂:http://www.rabbitmq.com/federation.html
我正在尝试使用类似于此示例的 RabbitMQ 在 PHP 上构建 RPC 服务:http: //www.rabbitmq.com/tutorials/tutorial-six-java.html 我正在使用此 PECL 扩展:http://pecl。 php.net/package/amqp(版本 1.0.3)
问题是,当我向服务器添加标志 AMQP_EXCLUSIVE 时,我的回调队列(在客户端脚本中声明)被锁定。
这是我的服务器
// connect to server
$cnn = new AMQPConnection('...');
$cnn->connect();
$channel = new AMQPChannel($cnn);
// create exchange
$exchangeName = 'k-exchange';
$exchange = new AMQPExchange($channel);
$exchange->setName($exchangeName);
$exchange->setType(AMQP_EX_TYPE_DIRECT);
$exchange->declare();
// declare queue to consume messages from
$queue = new \AMQPQueue($channel);
$queue->setName('tempQueue');
$queue->declare();
// start consuming messages
$queue->consume(function($envelope, $queue)
use ($channel, $exchange) {
// create callback queue
$callbackQueue = new \AMQPQueue($channel);
$callbackQueue->setName($envelope->getReplyTo());
$callbackQueue->setFlags(AMQP_EXCLUSIVE); // …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来保护我的网站消息系统,以便用户只能获取他们应该有权访问的数据。考虑到这一点,我想到了一个系统,其中我有一个主主题交换,我的服务器将向其发送所有消息。
该网站为每个用户保存一个 sessionId。当用户通过身份验证时,会创建另一个名为 sessionId 的交换。客户端用户可以绑定到除主交换机之外的所有交换机。由于 sessionID 是唯一的,因此很难猜测其他用户的 sessionID 并绑定以获取他们的消息。
每条消息都会有一个 sessionID.destination 的路由键。客户端将知道所有潜在的目的地。
为了帮助可视化:
-> SessionID Exchange -> client
Server -> master Exchange | -> SessionID Exchange -> client
-> SessionID Exchange -> client
Run Code Online (Sandbox Code Playgroud)
我的问题有两个方面。是否可以将交换器与rabbitmq中的交换器绑定?另外,以前有人建立过这样的系统吗?相反,在这个主题上有经验的人是否已经拥有我可以使用的工作系统?
先谢谢了。
过去几周我一直在学习 RabbitMQ。我正在尝试使用“标头”交换来设置决策树类型路由。如果匹配的话我知道如何将其分支出来。但我想要一个“捕获所有”队列,仅当标头与树中的其他任何内容都不匹配时才发送到该队列。
所以
Exchange1 -> if header.value1 = "company1" then goto queue "company1"
-> if header.value1 = "company2" then goto queue "company2"
-> if header.value1 didn't match anyone else then goto queue "catch all"
Run Code Online (Sandbox Code Playgroud)
前两个我很容易弄清楚。但我不知道如何做“不”或“没有找到匹配”。
如果只是设置“捕获所有”而没有任何与之关联的规则,则所有消息都会发送到那里,包括在其他规则下找到匹配项的消息。
如果我错了,请纠正我,但是,我在 Ruby 中开发了一段时间,它最明显的缺点之一是缺乏多线程。最近我一直在探索 Node js,特别是它的非阻塞 IO“功能”。我的问题是:
在Java中有一个选项:
channel.queueDeclare(endPointName, true, false, false, null);
对于rabbitmqadmin,命令行如何使用rabbitmqadmin命令行工具传递exclusive=false参数?
rabbitmqadmin工具的文档没有此用例的示例。
我正在寻找这样的 shell 脚本命令:
rabbitmqadmin declare queue name="endPointName" durable=true exclusive=false arguments={"x-message-ttl":86400000}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的 kubernetes 中部署一个 rabbitmq pod。所以我使用由 Google 托管的 rabbitmq:https : //github.com/GoogleCloudPlatform/rabbitmq-docker/blob/master/3/README.md#connecting-to-a-running-rabbitmq-container-kubernetes
在文档中,它说:Starting a RabbitMQ instance
替换your-erlang-cookie
为有效的 cookie 值。有关更多信息,请参阅RABBITMQ_ERLANG_COOKIE in
环境变量。
将以下内容复制到 pod.yaml 文件中,并运行 kubectl create -f pod.yaml。
apiVersion: v1
kind: Pod
metadata:
name: some-rabbitmq
labels:
name: some-rabbitmq
spec:
containers:
- image: launcher.gcr.io/google/rabbitmq3
name: rabbitmq
env:
- name: "RABBITMQ_ERLANG_COOKIE"
value: "unique-erlang-cookie"
Run Code Online (Sandbox Code Playgroud)
我怎么能生成 cookie erlang ?在互联网上搜索了几天后,我一无所获。我在 Windows 中安装了rabbitmq,我从未生成过 cookie erlang。
请问我该怎么办?谢谢
这是我的豆子:
@Bean
public Queue igSmev3ListenerQueue() {
Map<String, Object> args = new HashMap<>();
args.put("x-dead-letter-exchange", rabbitIgSmev3DlxProperties.getExchangeName());
args.put("x-dead-letter-routing-key", rabbitIgSmev3DlxProperties.getRoutingKey());
return new Queue(rabbitIgSmev3ListenerProperties.getQueueName(), true, false, false, args);
}
@Bean
public Queue igSmev3DlxQueue() {
return new Queue(rabbitIgSmev3DlxProperties.getQueueName(), true, false, false);
}
Run Code Online (Sandbox Code Playgroud)
以下是 application.yml 设置:
listener:
vhost: /
exchangeName: igSmev3Listener
queueName: igSmev3-ListenerQueue
routingKey: igSmev3-Listener
dlx:
vhost: /
exchangeName: igSmev3Dlx
queueName: igSmev3-DlxQueue
routingKey: igSmev3-Dlx
Run Code Online (Sandbox Code Playgroud)
我目前的错误:
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'x-dead-letter-exchange' for queue 'igSmev3-ListenerQueue' in vhost '/': received none but …
Run Code Online (Sandbox Code Playgroud) 我正在查看 Nestjs 文档来设置一个监听 RabbitMQ 消息的微服务。当我必须听一个队列时,这是非常直接的。如果我的微服务必须监听多个队列怎么办?我正在使用在 main.ts 文件中完成的以下方法。
await app.connectMicroservice({
transport: Transport.RMQ,
options: {
urls: ['amqp://localhost:5672'],
queue: 'q-1',
queueOptions: {
durable: false
},
},
});
Run Code Online (Sandbox Code Playgroud)
现在我有多个队列,我可以调用另一个 connectMicroservice 函数来这样做。但是,在我的控制器中使用消息时,无法告诉我的控制器要侦听哪个队列(q-1 或 q-2)。我所知道的是,有一个@MessagePattern 装饰器可以提及在该函数中使用什么模式,但不确定如何提及队列名称。请帮忙。
我需要从 Azure 上的多个应用服务读取消息并将其发布到 Rabbit MQ 实例。
任何人都可以建议我应该用来托管 Rabbit MQ 实例的 Azure 服务吗?
rabbitmq ×10
messaging ×2
node.js ×2
amqp ×1
architecture ×1
azure ×1
azure-queues ×1
erlang ×1
java ×1
javascript ×1
kubernetes ×1
locking ×1
masstransit ×1
nestjs ×1
task-queue ×1