簡體   English   中英

如何創建單獨的 JMS 消費者和發布者 spring 引導應用程序?

[英]How to create separate JMS consumer and publisher spring boot application?

我正在開發一個從外部隊列消費的消費者應用程序。 對於發布消息,有不同的應用程序。 發布者應用程序:我有這個接口及其實現 -

public interface IRequest extends Serializable{
    void setMessageId(String messageId);
    String getMessageId();
   
    
    Long getId();
    void setId(Long id);

   
}

摘要 class:

public abstract class MyMessage implements IRequest {
    private String messageId;
    private Long id;
    //and getter and setter for above fields
}

實施 1

public class Mymessage1 extends MyMessage{
    //some implementation
}

實施2:

public class Mymessage2 extends MyMessage{
    //some other implementation
}

發布者方法

public void publishToMessageTopic(IRequest message,String queueName) {
    logger.debug("Publishing message, id {} to MessageLogs Topic", message.getMessageId()); //queueName is "demoQueue"
    jmsTopicTemplate.convertAndSend(queueName, message);

}

這是 jms 模板 bean

@Bean
public JmsTemplate jmsTemplate() {
    JmsTemplate jmsTemplate = new JmsTemplate(cachingConnectionFactory());
    jmsTemplate.setMessageConverter(messageConverter());
    return jmsTemplate;
}

這是消息轉換器

@Bean
public MessageConverter messageConverter() {
    MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
    converter.setObjectMapper(getObjectMapper());//set object mapper
    converter.setTargetType(MessageType.TEXT);
    converter.setTypeIdPropertyName("_type");
    return converter;
}

消費者應用程序:具有與生產者相同的接口和實現以及相同的 JMS 配置。 監聽器如下:

@JmsListener(destination = "demoQueue", concurrency = "15",containerFactory = "jmsListenerContainerFactory")
public void processLogs(@Payload IRequest request) throws Exception {
    //some processing on request.
}

這是監聽器工廠 bean:

@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(DefaultJmsListenerContainerFactoryConfigurer configurer) {
    return getJmsListenerContainerFactory(configurer, "10"); // default container
}

當我嘗試從發布者應用程序發布消息時,它成功發布但在消費者方面我可以看到如下異常:

nested exception is org.springframework.jms.support.converter.MessageConversionException: Failed to resolve type id [com.model.Mymessage1]; nested exception is java.lang.ClassNotFoundException: com.model.Mymessage1

我該如何解決這個問題?

您將需要兩個項目通用的 package。 這通常包括接口和實現類。 您的消費者必須知道com.model.Mymessage1 ,或者我在這里遺漏了什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM