나는 예외를 받고있다
Caused by: java.lang.NoSuchMethodException: com.stockopedia.symfony.Foundation.importExchange([B)
at java.lang.Class.getMethod(Class.java:1665)
at org.springframework.util.MethodInvoker.prepare(MethodInvoker.java:178)
at org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter.invokeListenerMethod(MessageListenerAdapter.java:466)
... 12 more
이것이 내가 메시지를 보내는 방법입니다.
MessageProperties props = MessagePropertiesBuilder.newInstance()
.setContentType(MessageProperties.CONTENT_TYPE_TEXT_PLAIN)
.setReplyTo(this.replyQueue)
.setCorrelationId(itemStr.getBytes())
.setHeader("replyTimeout", this.replyTimeout).build();
Message message = MessageBuilder
.withBody(item.toString().getBytes()).andProperties(props)
.build();
이것은 내 리스너 컨테이너 구성입니다.
<rabbit:listener-container
connection-factory="rabbitConnectionFactory" concurrency="${import.exchanges.listener.concurrency}"
requeue-rejected="false" prefetch="1" >
<rabbit:listener queues="${import.exchanges.shares.queue}"
ref="foundation" method="importExchange" />
</rabbit:listener-container>
이것은 내 포조입니다.
public class Foundation {
public Message importExchange(Message exchange) {
System.out.println("Command:" + exchange.getBody());
Message message = MessageBuilder
.withBody(exchange.getBody().toString().getBytes()).setCorrelationId(exchange.getMessageProperties().getCorrelationId() .toString().getBytes()).build();
return message;
}
}
리스너로 사용하려는 동일한 pojo에 많은 메소드가 있으므로 인터페이스를 구현하고 싶지 않습니다.
MessageListenerAdapter 구현 코드, https://github.com/spring-projects/spring-amqp/blob/master/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/adapter/MessageListenerAdapter를 보았습니다. .java 및 문서 http://docs.spring.io/spring-amqp/docs/1.2.1.RELEASE/api/org/springframework/amqp/rabbit/listener/adapter/MessageListenerAdapter.html
여기에 Message 인수를 허용하는이 예제가 제공됩니다.
public interface RawMessageDelegate {
void handleMessage(Message message);
}
내 pojo가 비슷합니다. 왜이 예외가 발생합니까? setContentType 제거를 시도했지만 여전히 동일한 예외가 발생합니까?
내가 여러 콘텐츠 유형을 처리하는 Spring AMQP에서 비동기 메시지 수신기를 가질 수 있습니까? 현재는 표준 어댑터를 사용할 수 없습니다. MessageListener.onMessage()
메시지를 얻으려면 구현 해야합니다.
동일한 질문에 대한 답변에서 언급했듯이 이러한 주장을 허용하도록 어댑터를 향상시키는 것을 고려하고 있습니다.
편집하다:
또는 요청 / 응답을 수행해야하는 경우 어댑터를 계속 사용할 수 있지만 메시지 변환기 속성을로 설정해야합니다 null
.
이 경우 회신도이어야 Message
하며 어댑터가이를 변환 할 수 없습니다.
메시지를 받고 싶지만 변환 할 개체를 반환하려면 사용자 지정 변환기를 작성해야합니다.
사용자 MessageListenerAdapter
정의 를 사용하는 경우 요소 를 사용 SimpleMessageListenerContainer
하는 <bean/>
대신를 로 정의해야합니다 <rabbit:listener-container/>
.
리스너 용 Bean, Bean에 대한 참조가있는 어댑터 용 Bean (및 널 메시지 변환기), 어댑터에 대한 참조가있는 컨테이너 용 Bean을 정의하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다