当前位置: 首页 > 知识库问答 >
问题:

动态主题名/Quarkus SmallRye反应式消息传递Kafka

晏和风
2023-03-14

我想使用这个扩展:[Quarkus Smallrye响应消息Kafka]

但是在我的应用程序中,主题的名称是事先不知道的,它是根据运行时从用户那里收到的消息指定的。如何在没有注释的情况下以编程方式指定主题名称和与主题相关的设置?(仅用于向Kafka发送消息-

@ApplicationScoped
public class PriceGenerator {

    private Random random = new Random();

    // Don't want to use this 
    // "generated-price" not known at build time
    @Outgoing("generated-price")                       
    public Multi<Integer> generate() {                  
        return Multi.createFrom().ticks().every(Duration.ofSeconds(5))
                .onOverflow().drop()
                .map(tick -> random.nextInt(100));
    }

}

或者这些配置应该在运行时以编程方式设置

mp.messaging.outgoing.generated-price.connector=smallrye-kafka
mp.messaging.outgoing.generated-price.topic=prices
mp.messaging.outgoing.generated-price.value.serializer=org.apache.kafka.common.serialization.IntegerSerializer

因为我不认识路,所以我用了本地的Kafka驱动程序

    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-kafka-client</artifactId>
    </dependency>
Properties props = new Properties();
props.put("bootstrap.servers", "85.93.89.115:9092");
props.put("acks", "all");
props.put("retries", 0);
props.put("linger.ms", 1);
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
Producer<String, String> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<String, String>(topicName.toString(), messageFactory.MessageToString(message)));

共有1个答案

公孙棋
2023-03-14

您可以在启动时或需要的任何时候动态重写topic的值,但下面是一段代码,用于指示如何重写topic的预定义值:

@ApplicationScoped
public class AppLifecycleBean {

    void onStart(@Observes StartupEvent ev) {               
        System.setProperty("mp.messaging.outgoing.generated-price.topic", "example");
    }

    void onStop(@Observes ShutdownEvent ev) {               
    }

}
 类似资料:
  • 顺便说一下,在使用/而不是发射器时,我遇到了同样的问题。我已经决定给你们举这个例子,因为它很容易理解和再现。

  • 主题 GroupID 分区 筛选器(如果有) 我能想到的唯一方法是,我们可以在解析xml配置后创建messagelisteners并且每个主题都有自己的concurrentmessagelistenercontainer。 使用spring是否有其他更好的方法可用? 附注:我对Spring和Kafka并不陌生。如果在解释要求时有混淆,请告诉我 谢谢,Rajasekhar

  • 由于内容脚本在网页而不是扩展程序的上下文中运行,因此它们通常需要某种与扩展程序其余部分进行通信的方式。例如,RSS 阅读器扩展程序可以使用内容脚本来检测页面上 RSS 摘要的存在,然后通知后台页面以显示该页面的操作图标。 扩展及其内容脚本之间的通信使用消息传递来实现。任何一方都可以监听从另一端发送的消息,并在同一通道上进行响应。消息可以包含任何有效的 JSON 对象(空,布尔值,数字,字符串,数组

  • ms tcp nodelay 描述: 在信差的 TCP 会话上禁用 nagle 算法。 类型: Boolean 是否必需: No 默认值: true ms initial backoff 描述: 出错时重连的初始等待时间。 类型: Double 是否必需: No 默认值: .2 ms max backoff 描述: 出错重连时等待的最大时间。 类型: Double 是否必需: No 默认值: 15

  • 消息传递 目录 一次简单的请求 h3Name 长时间保持连接 h3Name 扩展之间的消息传递 h3Name 安全策略 h3Name 范例 h3Name API reference Properties propertyName Methods methodName Events eventName Types id For information on how to use experiment

  • 我们尝试使用小型反应式消息传递发布和订阅MQTT协议。我们设法通过以下简单代码将消息实际发布到特定主题/频道 我们想要做的是在我们需要方法时以某种方式调用动态主题,用户将在其中定义它。那是我们的问题,但后来我们在github中从该存储库中找到了这些类。包名称 例如,我们发现有一个类说它对MQTT代理进行了发布调用(Mosquito server up)。 在该语句中