У меня есть три приложения Spring, которые общаются друг с другом с помощью spring amqp (rabbitmq): invoice-service, tracking-service и правительственная служба. Мне уже удалось отправить сообщение из службы счетов-фактур в службу отслеживания.
Ниже приведен класс Получателя из службы отслеживания. Итак, я получаю сообщение от invoice-service и после некоторых действий в классе Handler отправляю TrackingMessage в правительственную службу.
@Component
public class Receiver {
@Autowired
private Handler handler;
@Autowired
private AmqpTemplate rabbitTemplate;
static final String exchange = "exchange-invoice";
static final String routingKey = "key-government";
@RabbitListener(queues = "queue-tracking")
public void receive(CustomMessage message) {
List<TrackingMessage> trackingMessages = handler.getCoordinatesByDates(message);
rabbitTemplate.convertAndSend(exchange,routingKey, trackingMessages.get(0));
}
}
Ниже представлен класс MessageBrokerConfiguration. Я использую Jackson2 Json для преобразования объекта a Java в JSON.
@Configuration
public class MessageBrokerConfiguration {
static final String queueName = "queue-tracking";
static final String exchange = "exchange-invoice";
static final String routingKey = "key-tracking";
@Bean
public Queue queue() {
return new Queue(queueName);
}
@Bean
public DirectExchange exchange() {
return new DirectExchange(exchange);
}
@Bean
Binding binding(Queue queue, DirectExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(routingKey);
}
@Bean
Handler handler(){ return new Handler();}
@Bean
public MessageConverter jsonMessageConverter() {
return new Jackson2JsonMessageConverter();
}
@Bean
public AmqpTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(jsonMessageConverter());
return rabbitTemplate;
}
}
Ниже представлен класс TrackingMessage из службы отслеживания.
@Entity
public class TrackingMessage {
@Id
@GeneratedValue
@JsonProperty("id")
private int id;
@JsonProperty("carId")
private int carId;
@JsonProperty("longitude")
private double longitude;
@JsonProperty("latitude")
private double latitude;
@JsonProperty("recordedTime")
private ZonedDateTime recordedTime;
public TrackingMessage() {
}
public TrackingMessage(int carId, double latitude, double longitude) {
this.carId = carId;
this.latitude = latitude;
this.longitude = longitude;
this.recordedTime = getTimeNow();
}
public TrackingMessage(@JsonProperty("id") int carId, @JsonProperty("carId") double latitude, @JsonProperty("longitude") double longitude,
@JsonProperty("recordedTime") ZonedDateTime recordedTime) {
this.carId = carId;
this.latitude = latitude;
this.longitude = longitude;
this.recordedTime = recordedTime;
}
public int getCarId() {
return carId;
}
public void setCarId(int carId) {
this.carId = carId;
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
public ZonedDateTime getRecordedTime() {
return recordedTime;
}
public void setRecordedTime(ZonedDateTime recordedTime) {
this.recordedTime = recordedTime;
}
private ZonedDateTime getTimeNow() {
return ZonedDateTime.now(ZoneOffset.UTC);
}
}
Ниже это класс Receiver от государственной службы. Поэтому, когда я получаю TrackingMessage в этом классе приемника, я получаю следующую ошибку:
Невозможно создать экземпляр java.time.ZonedDateTime
(не существует создателей, таких как конструкция по умолчанию)
Мои классы MessageBrokerConfiguration и TrackingMessage из государственной службы выглядят так же, как в службе отслеживания. Кто-нибудь придумал?
@Component
public class Receiver {
@RabbitListener(queues = "queue-government")
public void receive(TrackingMessage message) {
System.out.println(message);
}
}