1つのスレッドがメッセージを処理したときにjmsがメッセージを受け取るようにしたい(threadPoolが呼び出し可能にする)。 メッセージはマスタースレッドによって受信されます。JMSとThreadPoolの問題?
私は春3.0.5を使用します:マスタースレッドのウェイ1に
ApplicationContext context = new ClassPathXmlApplicationContext(
"application-context.xml");
jmsTemplate = (JmsTemplate) context.getBean("jmsTemplate");
destination = (Destination) context.getBean("destination");
_log4j.debug("ThreadSize in xml\t"
+ appConfig.getThumbCreatorThreadSize());
を:
while (countFlag < 0) {
try {
TextMessage msg = (TextMessage) jmsTemplate
.receive(destination);
// prehandle ,then give to sub workers.
if (msg != null) {
_log4j.debug("JMSMessageID:\t" + msg.getJMSMessageID()
+ "\t" + msg.getText());
IConsumer thumbConsumerImpl = null;
thumbConsumerImpl = new ThumbConsumerTaskImpl(msg);
Future<List<ThumbCreatorInfo>> result = threadPool
.submit((Callable<List<ThumbCreatorInfo>>) thumbConsumerImpl);
}
} catch (IllegalArgumentException e) {
_log4j.warn(e.getMessage(), e);
} catch (JMSException e) {
_log4j.error("Please check the queue server!JMSException!", e);
} catch (Exception e) {
_log4j.error("", e);
}
}
マスタースレッドのウェイ2に:
TextMessage msg = (TextMessage) jmsTemplate.receive(destination);
do {
try {
// prehandle ,then give to sub workers.
if (msg != null) {
_log4j.debug("JMSMessageID:\t" + msg.getJMSMessageID()
+ "\t" + msg.getText());
IConsumer thumbConsumerImpl = null;
thumbConsumerImpl = new ThumbConsumerTaskImpl(msg);
Future<List<ThumbCreatorInfo>> result = threadPool
.submit((Callable<List<ThumbCreatorInfo>>) thumbConsumerImpl);
}
msg = (TextMessage) jmsTemplate.receive(destination);
} catch (IllegalArgumentException e) {
_log4j.warn(e.getMessage(), e);
} catch (JMSException e) {
_log4j.error("Please check the queue server!JMSException!", e);
} catch (Exception e) {
_log4j.error("", e);
}
} while (countFlag < 0);
私の消費者はただ一つのスレッドdispatches.Thenはサブスレッドがプロセスをやらせてみましょう。 – fjjiaboming
@ user808032:そうですね、あなたはすでにSpringがしているものを書き直すようです。私は自分の答えを更新しました。見てみな。 –
OH.So、10スレッドのクライアント接続は1つだけですか?ありがとう! – fjjiaboming