以下代码不适用于汇合架构注册表。它没有给出模式注册表URL的连接超时错误。
消费者配置
@SpringBootApplication
@EnableBinding(Sink.class)
@EnableSchemaRegistryClient
public class ConsumerApplication {
private final Log logger = LogFactory.getLog(getClass());
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
@StreamListener(Sink.INPUT)
public void process(Sensor data) {
logger.info(data);
}
@Configuration
static class ConfluentSchemaRegistryConfiguration {
@Bean
public SchemaRegistryClient schemaRegistryClient(@Value("${spring.cloud.stream.schemaRegistryClient.endpoint}") String endpoint){
ConfluentSchemaRegistryClient client = new ConfluentSchemaRegistryClient();
client.setEndpoint("http://localhost:8081");
return client;
}
}
}
配置看起来像这样
spring:
cloud:
stream:
bindings:
input:
destination: sensor-topic
schemaRegistryClient:
endpoint: http://localhost:8081
schema:
avro:
schema-locations: classpath:avro/sensor.avsc
server.port: 9999
制作人配置
下面是放置消息的生产者配置,它无法连接到架构注册表
spring:
cloud:
stream:
bindings:
output:
contentType: application/*+avro
destination: sensor-topic
schemaRegistryClient:
endpoint: http://localhost:8081
schema:
avro:
schema-locations: classpath:avro/sensor.avsc
server.port: 9009
下面的是生产者配置
@SpringBootApplication
@EnableBinding(Source.class)
@EnableSchemaRegistryClient
@RestController
public class Producer1Application {
@Autowired
private Source source;
private Random random = new Random();
public static void main(String[] args) {
SpringApplication.run(Producer1Application.class, args);
}
@RequestMapping(value = "/messages", method = RequestMethod.POST)
public String sendMessage() {
source.output().send(MessageBuilder.withPayload(randomSensor()).build());
return "ok, have fun with v1 payload!";
}
private Sensor randomSensor() {
Sensor sensor = new Sensor();
sensor.setId(UUID.randomUUID().toString() + "-v1");
sensor.setAcceleration(random.nextFloat() * 10);
sensor.setVelocity(random.nextFloat() * 100);
sensor.setTemperature(random.nextFloat() * 50);
return sensor;
}
//Another convenience POST method for testing deterministic values
@RequestMapping(value = "/messagesX", method = RequestMethod.POST)
public String sendMessageX(@RequestParam(value="id") String id, @RequestParam(value="acceleration") float acceleartion,
@RequestParam(value="velocity") float velocity, @RequestParam(value="temperature") float temperature) {
Sensor sensor = new Sensor();
sensor.setId(id + "-v1");
sensor.setAcceleration(acceleartion);
sensor.setVelocity(velocity);
sensor.setTemperature(temperature);
source.output().send(MessageBuilder.withPayload(sensor).build());
return "ok, have fun with v1 payload!";
}
@Configuration
static class ConfluentSchemaRegistryConfiguration {
@Bean
public SchemaRegistryClient schemaRegistryClient(@Value("${spring.cloud.stream.schemaRegistryClient.endpoint}") String endpoint){
ConfluentSchemaRegistryClient client = new ConfluentSchemaRegistryClient();
client.setEndpoint(endpoint);
return client;
}
}
}