0
내 프로젝트에 활성 mq 인터페이스를 구현하는 방법을 배우고 있습니다. 이것이 내가 생산자와 소비자를 만드는 방법이다.동적으로 생성 할 때 소비자가 메시지를 소비하지 않음
public void connectionSetup(String portName) { // portname is object of PortTO class. We are creating producer and consumer pair for every existing PortTO object.
Connection connection = null;
try {
if (timeToLive != 0) {
}
// Create the connection.
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, url);
connection = connectionFactory.createConnection();
connection.start();
connection.setExceptionListener(this);
// Create the session
Session session = connection.createSession(transacted, Session.AUTO_ACKNOWLEDGE);
if (topic) {
destination = session.createTopic(subject);
} else {
destination = session.createQueue(portName);
}
// Create the producer.
MessageProducer producer = session.createProducer(destination); if (persistent) {
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
} else {
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
}
MessageConsumer consumer = session.createConsumer(destination); if (timeToLive != 0)
producer.setTimeToLive(timeToLive);
mapOfSession.put(portName, session);
mapOfMessageProducer.put(portName, producer);
mapOfMessageConsumer.put(portName, consumer); log.info("Producer is " + producer);
log.info("Consumer is " + consumer);
} catch (Exception e) {
log.error(e.getMessage());
}
}
그래서 우리는 생산자와 소비자를 생성하고 모든 PortTO 객체의지도에 저장된다.
public void onMessage(Message message) {
PortService portService = new PortService();
List<PortTO> portTOList = portService.getMoxaPorts();
for(PortTO portTO : portTOList) { // catching messages from producers of every PortTO object
MessageConsumer consumer = DataCollectionMessageProducer.getMapOfMessageConsumer().get(portTO.getPort()); // getting consumer from map of PortTO
consumer.setMessageListener(this);
message = consumer.receive(1000); if (message instanceof TextMessage) {
// some processing
}
} else {
if (verbose) {
}
}
}
}
어떤 이유가있을 수 있습니다 ...
TextMessage message = session.createTextMessage();
message.setIntProperty(key, 2);
producer.send(message);
그러나 소비자는 소비되지 않은 : 자, 생산자는 메시지를 보내는? 내 접근 방식이 잘못 되었습니까 ??
그래서 메시지를받을 것입니다. xml 파일에 수동으로 messageListener를 설정하고 싶지는 않습니다. – user746458
consumer.setMessageListener (this); 코드별로 메시지 수신기를 설정합니다. 이를 위해 xml을 편집 할 필요가 없습니다. onMessage 내부에서이를 수행하지 마십시오. 메시지가 도착하면 해당 메소드가 호출됩니다. –
나는 그 점을 얻었다. 사실, 우리 프로젝트에서는 xml 파일에 메시지 리스너를 생성하고 있습니다. 그러나 메시지 청취자의 수는 요구 사항에 따라 미래에 달라질 수 있습니다. 메시지 리스너를 XML로 코딩하지 않고 동적으로 생성 할 수 있습니까? – user746458