标签: rabbitmq

使用 RabbitMQ 订阅远程队列

使用 Mass Transit 和 RabbitMQ 设置对远程端点发布的消息的订阅的建议方法是什么?

在我们的例子中,大多数发布/订阅都是本地的,但对于我们的开发人员来说,订阅远程计算机上的共享发布者会很方便。

我看到的所有示例似乎都是本地的:http://docs.masstransit-project.com/en/latest/configuration/sub_config_api.html

看起来 RabbitMQ 联邦可能是一个选择,但看起来比我们需要的更复杂:http://www.rabbitmq.com/federation.html

masstransit rabbitmq

2
推荐指数
1
解决办法
3971
查看次数

RabbitMQ RPC:独占队列锁定@ PHP

我正在尝试使用类似于此示例的 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)

locking rabbitmq task-queue

2
推荐指数
1
解决办法
5531
查看次数

Rabbitmq 绑定交换到交换

我正在寻找一种方法来保护我的网站消息系统,以便用户只能获取他们应该有权访问的数据。考虑到这一点,我想到了一个系统,其中我有一个主主题交换,我的服务器将向其发送所有消息。

该网站为每个用户保存一个 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中的交换器绑定?另外,以前有人建立过这样的系统吗?相反,在这个主题上有经验的人是否已经拥有我可以使用的工作系统?

先谢谢了。

messaging amqp rabbitmq rabbitmq-exchange

2
推荐指数
1
解决办法
6178
查看次数

使用“NOT”或“不适合其他人去这里”的 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)

前两个我很容易弄清楚。但我不知道如何做“不”或“没有找到匹配”。

如果只是设置“捕获所有”而没有任何与之关联的规则,则所有消息都会发送到那里,包括在其他规则下找到匹配项的消息。

rabbitmq

2
推荐指数
1
解决办法
698
查看次数

使用rabbitmq与多线程之间的区别

如果我错了,请纠正我,但是,我在 Ruby 中开发了一段时间,它最明显的缺点之一是缺乏多线程。最近我一直在探索 Node js,特别是它的非阻塞 IO“功能”。我的问题是:

  1. 为什么要使用单线程语言并使用rabbitmq来实现异步,而你可以使用像node js这样的多线程语言,你可以并行触发1000个请求,并且它们都同时完成?
  2. Node.js 相比其他多线程语言有什么创新吗?我想我真正要问的是:node js 非阻塞 IO 和多线程之间有区别吗?

architecture multithreading rabbitmq node.js

2
推荐指数
1
解决办法
984
查看次数

如何传递“exclusive”作为rabbitmqadmin的参数来声明队列?

在Java中有一个选项:

  • 队列 - 队列的名称
  • Durable: true - 如果我们声明一个持久队列(该队列将在服务器重新启动后继续存在)
  • Exclusive: true - 如果我们声明一个独占队列(仅限于此连接)
  • autoDelete: true - 如果我们声明一个自动删除队列(服务器将在不再使用时删除它)
  • 参数:其他 - 队列的属性(构造参数)

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)

command-line-interface rabbitmq

2
推荐指数
1
解决办法
4415
查看次数

Rabbitmq:如何创建 RABBITMQ_ERLANG_COOKIE

我正在尝试在我的 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。

请问我该怎么办?谢谢

erlang rabbitmq kubernetes

2
推荐指数
1
解决办法
3173
查看次数

如何在Rabbit中设置x-dead-letter-exchange?

这是我的豆子:

    @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)

java rabbitmq spring-rabbit rabbitmq-exchange

2
推荐指数
1
解决办法
1947
查看次数

使用 Nestjs 监听多个 RabbitMQ 队列

我正在查看 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 装饰器可以提及在该函数中使用什么模式,但不确定如何提及队列名称。请帮忙。

javascript rabbitmq node.js microservices nestjs

2
推荐指数
1
解决办法
3411
查看次数

Azure 中的 Rabbit MQ 支持

我需要从 Azure 上的多个应用服务读取消息并将其发布到 Rabbit MQ 实例。

任何人都可以建议我应该用来托管 Rabbit MQ 实例的 Azure 服务吗?

messaging azure rabbitmq azure-queues

2
推荐指数
2
解决办法
773
查看次数