我有一个简单的Kafka/Scala项目,它创建了一个生产者。但是,现在我正在尝试创建消费者,当我使用以下代码时……
@Service
class KafkaService @Autowired()(producer: KafkaTemplate[String, Array[Byte]]){
@Value("${spring.kafka.topic}") val topic : String = null
def sendMessage(msg: String): Unit = {
System.out.println(s"Writing the message $msg to the topic ${this.topic}")
producer.send(topic, msg.getBytes());
}
@KafkaListener(id="test", topics="${this.topic}")
def consume(record: ConsumerRecord[String, String]): Unit = {
System.out.println(s"Consumed Strinsg Message : ${record.value()}")
}
}
我得到以下错误…
[ERROR] ...\service\KafkaService.scala:26: error: type mismatch;
[ERROR] found : String("${this.topic}")
[ERROR] required: Array[String]
[ERROR] @KafkaListener(id="test", topics="${this.topic}")
我错过了什么?
我还尝试了以下方法。。。
@Configuration
public class CommonConfiguration{
...
@Value("${spring.kafka.topic}")
public String topic;
...
}
@Service
class KafkaService @Autowired()(producer: KafkaTemplate[String, Array[Byte]], config: CommonConfiguration){
def sendMessage(msg: String): Unit = {
val topics : Array[String] = config.getTopics();
println(s"Writing the message $msg ${topics.mkString(" ")}")
producer.send(config.topic, msg.getBytes());
}
@KafkaListener(id="test", topics="#{config.topic.split(',')}")
def consume(record: ConsumerRecord[String, String]): Unit = {
System.out.println(s"Consumed Strinsg Message : ${record.value()}")
}
}
仍然没有运气,但生产者的控制台日志得到了正确的值。
@KafkaListener(id="scala", topics=Array("#{'${spring.kafka.topic}'.split(',')}"))
欲了解更多信息,请参阅此问题或此问题
错误表明您需要Array[String]类型作为主题,而您提供了String类型。您需要将主题字符串转换为数组。
注释看起来与Spring非常相似,您可以在其中执行以下操作
@Value("#{'${kafka.topic}'.split(',')}")
问题内容: 如何在Python中声明静态属性? 这里写了我如何声明一个方法: Python中的静态方法? 问题答案: 在Python的类级别定义的所有变量均被视为静态 在类中,您可以使用相同的名称拥有两个不同的变量(一个静态变量和一个普通变量)。不要困惑。
我正在将ApacheFelixSCR注释迁移到OSGI声明性服务[AEM]。在迁移过程中,我无法在DS中找到基数的精确替换。 现有的SCR实施: 现在它在OSGi声明性服务中迁移如下 在DS注释实现中,我必须映射@Property中存在的参数基数。请推荐我
我正在使用maven项目进行UI自动化,我需要在多个环境和多个浏览器中运行一些测试。我已经创建并添加了pom.xml文件,并声明了其中的属性。但是当我通过终端执行它时,我得到了错误。我用的命令- 错误-[信息]扫描项目...[ERROR][ERROR]处理POM时遇到一些问题:[FATAL]不可解析POM d:\work\cucumber_projects\ui-automation-projec
问题内容: 在Scala中,我可以这样声明一个字节数组 这太冗长了。有没有更简单的方法来声明Byte数组,类似于Java的 请注意,由于String 中的,以下结果导致错误 问题答案: 我相信您能做的最短的是 您 必须 将和转换为字节,因为它们不是有效的字节文字,因为它们超出了有符号字节的范围([-128,127])。 请注意,Java也是如此,以下给出了编译错误: 您必须将192和168强制转换
问题内容: 我希望能够用元数据注释我的类型和方法,并在运行时读取它们。 语言参考说明了如何声明属性用法,但实际上可以声明自己的属性吗? 阅读将需要某种反射机制,我根本无法在参考文献中找到这种反射机制,因此问题的第二部分可能是- 是否可能反射。如果这些功能在Swift中不可用,是否可以用Objective-C代码完成(但在Swift实例和类型上)? 相对不相关的注释:关于将什么建模为属性以及将哪些内
问题内容: 对于上述代码,快速二进制文件抱怨“未处理错误,因为未将封闭函数声明为” throws”。 我如何在上面声明“ someProperty”“抛出”? 和 和 似乎不起作用。 问题答案: Swift 5更新:仍然不可能。 从Swift 3开始: 您不能从计算的属性中抛出。如果要抛出,必须使用一个函数。Swift编程语言末尾的“ 语言参考”部分的“声明”部分仅列出(和)作为函数和初始化声明的