Реализуются 2 одинаковых слушателя JMS вместо 1ого. ActiveMQ. И не удается передать и принять объект
Здравствуйте пишу приложение на Spring (не использую Spring Boost). Приложение использует JMS брокер ActiveMQ.
Слушатель:
@Component
public class ReceiveMessage {
private HistoryService historyService;
@Autowired
public void setHistoryService(HistoryService historyService) {
this.historyService = historyService;
}
@JmsListener(destination = "my_topic")
public void receiveMessage(ObjectMessage objectMessage) throws JMSException {
Object object = ((ObjectMessage) objectMessage).getObject();
System.out.println(object);
if(objectMessage.getObject() instanceof History) {
History history = (History) objectMessage.getObject();
try {
historyService.add(history);
} catch (Exception e) {
System.out.println(e.toString());
}
}
Отправитель:
@Component
public class MessageProducer {
@Autowired
JmsTemplate jmsTemplate;
public void sendMessage(History history) {
jmsTemplate.send("my_topic", new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
ObjectMessage objectMessage = session.createObjectMessage(history);
return objectMessage;
}
}
);
}
}
Конфигурация JMS
@Configuration
@EnableJms
@ComponentScan(basePackages = "com.mycomp")
public class JMSConfig {
String BROKER_URL = "tcp://localhost:61616";
String BROKER_USERNAME = "admin";
String BROKER_PASSWORD = "admin";
@Bean
public ActiveMQConnectionFactory connectionFactory(){
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL(BROKER_URL);
connectionFactory.setPassword(BROKER_USERNAME);
connectionFactory.setUserName(BROKER_PASSWORD);
return connectionFactory;
}
@Bean
public JmsTemplate jmsTemplate(){
JmsTemplate template = new JmsTemplate();
template.setConnectionFactory(connectionFactory());
template.setPubSubDomain(true); // для работы с topic
//утсановка места назначения для отправки и приема по умалчанию
// Destination defaultDestination = new ActiveMQTopic("my_topic");
// template.setDefaultDestination(defaultDestination);
return template;
}
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory());
factory.setConcurrency("1-1");
factory.setPubSubDomain(true); // для работы с topic
return factory;
}
}
класс History:
@Entity (name = "History")
@Table(name = "HISTORY", schema = "PUBLIC")
public class History implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private long id;
@Column(name = "CHANGETYPE")
private String changeType;
@Column(name = "CHANGEENTITY")
private String changeEntity;
@Column(name = "VALUE")
private String value;
public History(){
}
// сеттеры геттеры
1) в том что вместо 1 слушателя реализуются 2 слушателя.
2) не получается привеcти объект при получении сообщения к типу History.
Попробовал глянуть что отправляется и принимается в режиме debug
Вот что принимается в ReciveMessage:
Но вроде какие-то данные лежат тут:



