MessageListenerAdapter를 사용하여 Spring amqp에서 메시지 유형 매개 변수와 함께 pojo를 사용하는 방법은 무엇입니까?

비살

나는 예외를 받고있다

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관