我有一个问题,源发送GenericMessage[payload=xxxxx,...]而接收器接收消息作为10,120,120,120,120,120。
这个问题发生在我设置Avro消息转换器之后。如果我删除Avro消息转换器并使用StreamListener来处理消息转换,它会正常工作。
源应用程序。属性
spring.cloud.stream.bindings.toGreeting.destination=greeting
spring.cloud.stream.bindings.toGreeting.contentType=application/*+avro
spring.cloud.stream.schema.avro.dynamicSchemaGenerationEnabled=true
水槽应用
server.port=8990
spring.cloud.stream.bindings.greeting.destination=greeting
消息转换器
@Configuration
@EnableSchemaRegistryClient
public class MessageConverterConfig {
@Bean
public MessageConverter topic1MessageConverter() throws IOException {
return new AvroSchemaMessageConverter(MimeType.valueOf("avro/bytes"));
}
}
应用程序类
@SpringBootApplication
@EnableSchemaRegistryClient
public class SourceApplication {
public static void main(String[] args) {
SpringApplication.run(SourceApplication.class, args);
}
}
@EnableSchemaRegistryServer
@EnableSchemaRegistryClient
@SpringBootApplication
public class SinkApplication {
public static void main(String[] args) {
SpringApplication.run(SinkApplication.class, args);
}
}
我是否缺少配置?谢谢
如果您正在设置spring.cloud.stream.bindings.toGreeting.contentType=Application/*avro
,则需要使用AvroSchemaRegstryClientMessageConverter
(由SCSt配置),并且您不必为MimeTypeavro/bytes
设置显式
转换器topic1MessageConverter
。
如果要使用此转换器,则需要设置spring。云流动绑定。toGreeting。contentType=avro/字节。
这里有一条简单的规则:
如果您只想拥有一个可以从avro序列化/反序列化的消息转换器,并且您可以在配置GenericRecords期间提供架构位置,或者您的StreamListener方法具有SpecificRecord类型的签名。然后选择AvroSchemaMessageConverter,像设置一样进行设置,但使用avro/bytes。我们保留应用程序/*avro以支持模式演化。
因此,如果您设置了EnableSchemaRegistryClient,那么您将委托给外部注册表来拥有您的模式。在这种情况下,不仅需要注册表,还需要在那里注册的模式。
默认情况下,如果是spring,生产者将自动注册SpecificRecord/GenericRecord或POJO类型的任何有效负载。云流动架构。阿夫罗。已启用dynamicSchemaGenerationEnabled。
在这种情况下,生产者实际上会将头设置为类似于应用程序/vnd的内容。使用者v1 avro假设你的主题是用户,并且是第一个版本。
下游,如果您的消费者还配置了应用程序/*avro,他们将能够读取此contentType并推断其主题/版本,以查询架构服务器并检索适当的架构。
这个问题不难,我已经用自己的方法解决了,但我想听听你的意见,也许有什么方法可以让这成为一个改进的选择?Java 8-11。
我正在构建一个计算器,为了让计算器工作,我需要将字符串中的所有整数转换为双数。例如,如果我有一个字符串:3*8 5/2-4,我想将其转换为:3.0*8.0 5.0/2.0-4.0。我该怎么做? 编辑:如果我有这个字符串:3.0*8.0 5.0/2.0-4,我想将他转换为:3.0*8.0 5.0/2.0-4.0
我正在尝试使用一个名为“start checknumber”的双变量,该变量的值应该为“40305555”,并将其转换为字符串。在调试我的代码时,startCheckNumber显示的值为4.030555e7。如果我执行以下命令将其转换为字符串,它将显示如下所示,而不是“4030555” 在这种情况下,有没有比使用ValueOf更好的方法将double变量转换为String?我尝试了'Double
问题内容: 您如何将此String转换为gson.JsonArray? 这是我的代码: 这是将这个Collections字符串转换为JSonArray的方法吗? 问题答案: 要在JSON数组中包含字符串值,必须记住在Java程序中用反斜杠转义双引号。请参见下面的声明。 您在main()方法中的代码可以正常工作。以下只是对main()方法中的代码的微小修改。 最后,请记住在语句“ com.googl
我将XML作为字符串传递给一个方法,并再次将其转换为XML来完成我的工作。 其正常工作正常,但当出现特殊字符时,如<代码> 我的XML字符串: 我的代码是: 错误: “=”是意外标记。预期标记为“;”。第1行,位置150。 完全错误为: 系统Xml。XmlException未由用户代码处理HResult=-2146232000消息=“=”是意外令牌。预期标记为“;”。第1行,位置150。源=系统。
问题内容: 这可能之前已经被回答过了,但是那是关于unicode的,我不认为这是unicode(它是ASCII的。。。)。 当我在终端中执行此操作时,没有任何问题 但是当我在Java中使用以下内容时 它返回错误:未注册的vm’“ TestMachine”’ 对于其中带有空格的参数(例如Test \ Machine),也是如此,然后它不会转义空格。 现在我认为这与字符编码有关,但是我看不到设置该o_