标签: messaging

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
查看次数

RabbitMQ中的worker是什么

来自 RabbitMQ文档

使用任务队列的优点之一是能够轻松并行工作。如果我们正在积压工作,我们可以添加更多工人,这样就可以轻松扩展。

我只是不清楚这里的工作人员是什么,是消息被推送到的工作队列还是消费者接收器代码或某些内部rabbitmq守护进程?谁能解释一下这一点。谢谢

messaging rabbitmq

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

队列公平性和消息传递服务器

我正在寻求解决消息传递服务器和队列的 FIFO 性质所遇到的问题。在某些情况下,我希望根据消息传递顺序以外的标准将队列中的消息分发到消费者池。理想情况下,这将防止用户占用系统中的共享资源。以这个过于简化的场景为例:

  • 应用程序中有一项功能,用户可以清空垃圾箱。
  • 此事件为垃圾桶中的每个项目发送一条 DELETE 消息
  • 该队列的使用者调用具有速率限制 API 的 Web 服务。

鉴于每个用户的垃圾箱中可能有大量消息,我们有哪些选项可以允许并发处理每个垃圾箱而不考虑排队时间?在我看来,有几个明显的解决方案:

  • 为每个用户创建单独的队列和消费者池
  • 将消息从单个队列随机传递到单个消费者池

在我们的例子中,创建一个单独的队列并管理每个用户的消费者确实不切实际。这是可以做到的,但我认为如果合理的话我真的更喜欢第二种选择。我们正在使用 RabbitMQ,但如果有更适合此任务的技术,则不一定与其绑定。

我正在考虑使用 Rabbit 的消息优先级来帮助随机发送的想法。通过随机为消息分配 1 到 10 之间的优先级,这应该有助于分发消息。这种方法的问题是,如果队列永远不会完全清空,那么具有最低优先级的消息可能会永远卡在队列中。我以为我可以在消息上使用 TTL,然后以升级的优先级重新排队消息,但我在文档中注意到了这一点

应过期的消息仍然只会从队列头部过期。这意味着与普通队列不同,即使每个队列的 TTL 也可能导致过期的低优先级消息卡在未过期的高优先级消息后面。这些消息永远不会被传递,但它们会出现在队列统计信息中。

我担心我可能会因为这种方法而陷入兔子洞。我想知道其他人是如何解决这个问题的。任何有关创意路由、消息传递模式或任何替代解决方案的反馈将不胜感激。

messaging jms message-queue rabbitmq

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

Spring Kafka 和主题消费者的数量

在我的 Spring Boot/Kafka 项目中,我有以下消费者配置:

@Configuration
public class KafkaConsumerConfig {

    @Bean
    public ConsumerFactory<String, String> consumerFactory(KafkaProperties kafkaProperties) {
        return new DefaultKafkaConsumerFactory<>(kafkaProperties.buildConsumerProperties(), new StringDeserializer(), new JsonDeserializer<>(String.class));
    }

    @Bean
    public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory(KafkaProperties kafkaProperties) {

        ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(consumerFactory(kafkaProperties));
        factory.setConcurrency(10);    
        return factory;
    }

    @Bean
    public ConsumerFactory<String, Post> postConsumerFactory(KafkaProperties kafkaProperties) {
        return new DefaultKafkaConsumerFactory<>(kafkaProperties.buildConsumerProperties(), new StringDeserializer(), new JsonDeserializer<>(Post.class));
    }

    @Bean
    public ConcurrentKafkaListenerContainerFactory<String, Post> postKafkaListenerContainerFactory(KafkaProperties kafkaProperties) {

        ConcurrentKafkaListenerContainerFactory<String, Post> factory = new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(postConsumerFactory(kafkaProperties));

        return factory;
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的PostConsumer

@Component
public …
Run Code Online (Sandbox Code Playgroud)

messaging apache-kafka spring-boot spring-kafka

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

有没有办法在 RabbitMQ 中显式地将队列绑定到默认交换?

我犯了一个错误:现在两个队列都明确绑定到某个交换,我可以为每个队列进行编辑。这些队列之一必须绑定到默认交换。现在,当我尝试将该队列的交换更改为空字符串时,它会引发异常:

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

java messaging rabbitmq rabbitmq-exchange

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

Azure 中的 Rabbit MQ 支持

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

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

messaging azure rabbitmq azure-queues

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

c#形成沟通

我有一个C#应用程序,它由3种形式组成:

1: Battleship Game GUI
2: Network GUI (does client/server connections)
3: Chat GUI
Run Code Online (Sandbox Code Playgroud)

首先加载表单1.当用户选择时setup network,显示表单2.

当用户选择发送聊天或收到聊天时,将显示聊天.

我希望表单2处理所有消息并将相关消息传递给相关GUI以进一步解码消息.

我还处于发展的早期阶段.目前我正在尝试使用代表在表单之间进行通信.

这是最好的方法吗?关于应用程序组件相互发送消息的最佳实践是什么?

.net c# messaging ipc winforms

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

log4net - 为跟踪目的创建许多记录器是一个好习惯吗?

我想在我的消息传递应用程序中添加跟踪功能.我使用的每条消息都有一个唯一的标识符,该标识符被转发到后续消息(由原始消息产生的消息).

为了能够跨多个进程和可能的服务器监视消息的生命周期行为,我想使用log4net远程处理appender.

我可以使用一个记录器并在消息本身中编码消息ID:

  • Logger: "MessageLivetime" Message: "SomeId | message text")

但是我认为如果我为每条消息创建一个记录器会很聪明:

  • Logger: "MessageLivetime.SomeId" Message: "message text")

但是由于LogManager该类没有删除记录器的方法,我担心会遇到问题,因为会创建数千个废弃的记录器.

如果这种方法可行,那么对log4net更有洞察力的人能给我一个暗示吗?

我已经找到了上下文属性.他们是更好的选择吗?我如何写入事件上下文?

c# messaging log4net nservicebus

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

linux中高性能消息在c ++中的线程之间传递

说我有一个产生2个线程的进程

第一个线程在UDP端口上监听数据包事件的紧密循环.第二个线程是接收此UDP数据包中包含的字节并解析它/做东西.

谁能推荐比使用linux消息队列更快的方法?我认为它们很慢,因为它们在写入队列时复制字节并在从队列中读取时再次复制它们

我知道zeromq库,但有没有一个光滑的方式来做到这一点没有这个开销?我意识到我可以在两个线程之间使用tcp/ip套接字进行简单的排队通信但是有更快的方法吗?

我想也许内存中的环形缓冲区是在线程和用于控制指向最近更新元素的指针的互斥体之间共享的?

任何想法在这里?

c++ linux performance messaging

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

暂停流消耗

我正在开发一个在一分钟内处理很少记录的应用程序.请求率约为每分钟2次.这些请求是为一组数据创建和更新的.要求是交付保证,可靠的交付,订购保证和防止任何消息丢失.

  1. 我们的团队决定使用Kafka,我认为它不适合用例,因为Kafka最适合流数据.相反,我们可以更好地使用传统的消息模型.虽然卡夫卡确实提供每个分区排序,同样可以是传统的邮件系统上,如果消息的数目是低的和数据的来源也低实现.这是一个公平的陈述吗?

  2. 我们使用Kafka流来处理数据,处理要求我们对外部系统进行查找.如果外部系统不可用,那么当外部查找系统可用时,我们将停止处理并自动将消息传递到目标系统.目前,我们通过在处理过程中不断循环并检查系统是否可用来停止处理.a)这是在处理过程中中途停止流的最佳方法,以便它不再接收任何消息吗?b)数据流框架是否设计为在中途停止或暂停,以便它们在一段时间内完全停止使用流?

streaming integration messaging apache-kafka confluent

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