异常异常与 SpringAMQPMessageSource.onMessage(Message, Channel) Axon 中的 throws 子句不兼容
Exception Exception is not compatible with throws clause in SpringAMQPMessageSource.onMessage(Message, Channel) Axon
我正在 Spring Boot + Axon Framework 开发演示,此处说明:https://www.youtube.com/watch?v=Jp-rW-XOYzA&list=PLgGXSWYM2FpOa_FTla-x5Wd10dpmgrRC4&index=54。在这个例子中,我只使用最新的依赖项,其他的东西我保持原样。
当我简单地 运行 代码时,我得到了以下错误并且这里已经有问题了。请指导我。
错误:-
java.lang.Error: Unresolved compilation problem:
Exception Exception is not compatible with throws clause in SpringAMQPMessageSource.onMessage(Message, Channel)
at com.example.DemoComplaintsStatsApplication.onMessage(DemoComplaintsStatsApplication.java:54) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_151]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_151]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_151]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_151]
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:181) ~[spring-messaging-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:114) ~[spring-messaging-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.amqp.rabbit.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:51) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:188) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:126) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1414) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener(AbstractMessageListenerContainer.java:1337) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:1324) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:1303) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:817) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:801) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access0(SimpleMessageListenerContainer.java:77) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1042) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at java.lang.Thread.run(Unknown Source) [na:1.8.0_151]
DemoComplaintsStatsApplication.java
@SpringBootApplication
public class DemoComplaintsStatsApplication {
public static void main(String[] args) {
SpringApplication.run(DemoComplaintsStatsApplication.class, args);
}
@ProcessingGroup("amqpEvents")
@RestController
public static class ComplaintStatisticsAPI {
private ConcurrentMap<String, AtomicLong> staticstics = new ConcurrentHashMap<>();
@EventHandler
public void on(ComplaintFileEvent event) {
staticstics.computeIfAbsent(event.getCompany(), k -> new AtomicLong()).incrementAndGet();
}
@GetMapping
public Map<String, AtomicLong> getStatistics(){
return staticstics;
}
}
@Bean
public SpringAMQPMessageSource complaintEvents(Serializer serializer) {
return new SpringAMQPMessageSource(new DefaultAMQPMessageConverter(serializer)) {
@RabbitListener(queues = "ComplaintEvents")
@Override
public void onMessage(Message message, Channel channel) throws Exception {
super.onMessage(message, channel);
}
};
}
}
SpringAMQPMessageSource#onMessage(Message, Channel)
函数曾经是SpringAMQPMessageSource#onMessage(Message, Channel) throws Exception
。然而,从 3.4 开始,情况已不再如此。
我看到你也在 Axon Framework 上发布了另一个 Whosebug,你升级到 3.4 版了吗?
我想指出 3.4 不是 框架的最新版本,因为它是 4.0。
4.0 还包括对 Axon Server 的一个非常简单的介绍,一个免费使用的替代品,用于在应用程序之间存储事件和发布消息(命令、事件和查询)。很快,它完全省略了 'Spring AMQP' 包的需要,应该会大大简化您的代码。
尽管如此,要解决您的问题,请删除覆盖的 onMessage(Message, Channel)
函数上的 throws Exception
应该可以解决问题。
我正在 Spring Boot + Axon Framework 开发演示,此处说明:https://www.youtube.com/watch?v=Jp-rW-XOYzA&list=PLgGXSWYM2FpOa_FTla-x5Wd10dpmgrRC4&index=54。在这个例子中,我只使用最新的依赖项,其他的东西我保持原样。
当我简单地 运行 代码时,我得到了以下错误并且这里已经有问题了。请指导我。
错误:-
java.lang.Error: Unresolved compilation problem:
Exception Exception is not compatible with throws clause in SpringAMQPMessageSource.onMessage(Message, Channel)
at com.example.DemoComplaintsStatsApplication.onMessage(DemoComplaintsStatsApplication.java:54) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_151]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_151]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_151]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_151]
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:181) ~[spring-messaging-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:114) ~[spring-messaging-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.amqp.rabbit.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:51) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:188) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:126) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1414) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener(AbstractMessageListenerContainer.java:1337) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:1324) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:1303) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:817) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:801) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access0(SimpleMessageListenerContainer.java:77) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1042) ~[spring-rabbit-2.0.8.RELEASE.jar:2.0.8.RELEASE]
at java.lang.Thread.run(Unknown Source) [na:1.8.0_151]
DemoComplaintsStatsApplication.java
@SpringBootApplication
public class DemoComplaintsStatsApplication {
public static void main(String[] args) {
SpringApplication.run(DemoComplaintsStatsApplication.class, args);
}
@ProcessingGroup("amqpEvents")
@RestController
public static class ComplaintStatisticsAPI {
private ConcurrentMap<String, AtomicLong> staticstics = new ConcurrentHashMap<>();
@EventHandler
public void on(ComplaintFileEvent event) {
staticstics.computeIfAbsent(event.getCompany(), k -> new AtomicLong()).incrementAndGet();
}
@GetMapping
public Map<String, AtomicLong> getStatistics(){
return staticstics;
}
}
@Bean
public SpringAMQPMessageSource complaintEvents(Serializer serializer) {
return new SpringAMQPMessageSource(new DefaultAMQPMessageConverter(serializer)) {
@RabbitListener(queues = "ComplaintEvents")
@Override
public void onMessage(Message message, Channel channel) throws Exception {
super.onMessage(message, channel);
}
};
}
}
SpringAMQPMessageSource#onMessage(Message, Channel)
函数曾经是SpringAMQPMessageSource#onMessage(Message, Channel) throws Exception
。然而,从 3.4 开始,情况已不再如此。
我看到你也在 Axon Framework 上发布了另一个 Whosebug,你升级到 3.4 版了吗? 我想指出 3.4 不是 框架的最新版本,因为它是 4.0。 4.0 还包括对 Axon Server 的一个非常简单的介绍,一个免费使用的替代品,用于在应用程序之间存储事件和发布消息(命令、事件和查询)。很快,它完全省略了 'Spring AMQP' 包的需要,应该会大大简化您的代码。
尽管如此,要解决您的问题,请删除覆盖的 onMessage(Message, Channel)
函数上的 throws Exception
应该可以解决问题。