[英]Incorrect message body size to deserialize to a Long rabbit MQ java Micronaut
I am getting a serialization exception as Incorrect message body size to deserialize to a Long
as I understand that it is not able to serialize the LONG我收到一个序列化异常,因为Incorrect message body size to deserialize to a Long
,因为我知道它无法序列化LONG
Micronaut RabbitMQ producer Micronaut RabbitMQ 生产商
@RabbitProperty(name = "replyTo", value = "amq.rabbitmq.reply-to")
@Binding(ConstantValues.COUNT_CATEGORY)
Maybe<Long> Count(String id);
Micornaut RabbitMQ Listener小牛 RabbitMQ 监听器
@Queue(ConstantValues.COUNT_CATEGORY)
public Maybe<Long> Count(String id) {
LOG.info(String.format("Listener --> Count category for specified id = %s", id));
CategorySearchCriteria criteria = new CategorySearchCriteria();
criteria.setId(id);
Bson query = QueryBuilder.QueryBuilder(criteria, Bson.class).get(0);
var item = Single.fromPublisher(
this.repository.getCollection(ConstantValues.PRODUCT_CATEGORY_COLLECTION_NAME, Category.class)
.countDocuments(query)).blockingGet();
return Maybe.just(item);
}
Error错误
io.micronaut.core.serialize.exceptions.SerializationException: Incorrect message body size to deserialize to a Long
at io.micronaut.rabbitmq.serdes.JavaLangRabbitMessageSerDes$LongSerDes.deserialize(JavaLangRabbitMessageSerDes.java:314)
at io.micronaut.rabbitmq.serdes.JavaLangRabbitMessageSerDes$LongSerDes.deserialize(JavaLangRabbitMessageSerDes.java:306)
at io.micronaut.rabbitmq.serdes.JavaLangRabbitMessageSerDes.deserialize(JavaLangRabbitMessageSerDes.java:81)
at io.micronaut.rabbitmq.intercept.RabbitMQIntroductionAdvice.deserialize(RabbitMQIntroductionAdvice.java:323)
at io.micronaut.rabbitmq.intercept.RabbitMQIntroductionAdvice.lambda$intercept$22(RabbitMQIntroductionAdvice.java:268)
at io.reactivex.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.onNext(FlowableFlatMap.java:132)
at io.micronaut.reactive.rxjava2.RxInstrumentedSubscriber.onNext(RxInstrumentedSubscriber.java:59)
at io.reactivex.internal.operators.flowable.FlowableTimeoutTimed$TimeoutSubscriber.onNext(FlowableTimeoutTimed.java:101)
at io.micronaut.reactive.rxjava2.RxInstrumentedSubscriber.onNext(RxInstrumentedSubscriber.java:59)
at io.reactivex.internal.subscriptions.DeferredScalarSubscription.complete(DeferredScalarSubscription.java:132)
at io.reactivex.internal.operators.single.SingleToFlowable$SingleToFlowableObserver.onSuccess(SingleToFlowable.java:62)
at io.micronaut.reactive.rxjava2.RxInstrumentedSingleObserver.onSuccess(RxInstrumentedSingleObserver.java:65)
at io.reactivex.internal.operators.single.SingleFlatMap$SingleFlatMapCallback$FlatMapSingleObserver.onSuccess(SingleFlatMap.java:111)
at io.micronaut.reactive.rxjava2.RxInstrumentedSingleObserver.onSuccess(RxInstrumentedSingleObserver.java:65)
at io.reactivex.internal.operators.single.SingleDoFinally$DoFinallyObserver.onSuccess(SingleDoFinally.java:73)
at io.micronaut.reactive.rxjava2.RxInstrumentedSingleObserver.onSuccess(RxInstrumentedSingleObserver.java:65)
at io.reactivex.internal.operators.single.SingleCreate$Emitter.onSuccess(SingleCreate.java:67)
at io.micronaut.rabbitmq.reactive.RxJavaReactivePublisher$3.handleDelivery(RxJavaReactivePublisher.java:324)
at com.rabbitmq.client.impl.ConsumerDispatcher$5.run(ConsumerDispatcher.java:149)
at com.rabbitmq.client.impl.ConsumerWorkService$WorkPoolRunnable.run(ConsumerWorkService.java:104)
I know this is a serialization issue, but quite not sure how to fixed it.我知道这是一个序列化问题,但不确定如何解决。
I was missing the point from Micronaut documentation我错过了 Micronaut 文档中的要点
RPC consumer methods must never return a reactive type. RPC 使用者方法绝不能返回反应类型。 Because the resulting publish needs to occur on the same thread and only a single item can be emitted, there is no value in doing so.因为生成的发布需要在同一个线程上进行,并且只能发出一个项目,所以这样做没有任何价值。
change the listener method改变监听方法
@Queue(ConstantValues.COUNT_CATEGORY)
public Long Count(String id) {
LOG.info(String.format("Listener --> Count category for specified id = %s", id));
CategorySearchCriteria criteria = new CategorySearchCriteria();
criteria.setId(id);
Bson query = QueryBuilder.QueryBuilder(criteria, Bson.class).get(0);
return Single.fromPublisher(
this.repository.getCollection(ConstantValues.PRODUCT_CATEGORY_COLLECTION_NAME, Category.class)
.countDocuments(query)).blockingGet();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.