这是我的消费者代码。在这里,我试图连续收听队列,并且消息来了,我尝试将回复发送到另一个队列。但是当我使用setMessageListener时,我的on Message代码没有被调用。
import groovyjarjarantlr.debug.MessageEvent;
import groovyjarjarantlr.debug.MessageListener;
import groovyjarjarantlr.debug.TraceEvent;
import groovyjarjarasm.asm.Context
@Grab(group='net.sf.gtools.jms', module='JmsCategory', version='0.2')
@Grab(group='org.apache.activemq',module = 'activemq-all', version='5.9.0')
@Grab(group="junit", module="junit", version="4.11")
import javax.jms.Session
import javax.naming.InitialContext
import org.apache.activemq.ActiveMQConnectionFactory
import org.apache.ivy.util.Message;
def connFactory = new ActiveMQConnectionFactory("tcp://pass-dev01.unx.sas.com:61616")
def conn = connFactory.createConnection()
def sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE)
def dest = sess.createQueue("pass-dev00.async")
def cons = sess.createConsumer(dest)
javax.jms.MessageListener listener
conn.start()
cons.setMessageListener(listener);
conn.close()
public abstract class JMSMessageListener implements MessageListener {
public void onMessage(Message message) {
println("in onmessage")
def msg1 = cons.receive()
println(msg1)
// def sendMessage() {
Properties props = new Properties()
File propsFile = new File('C:/workspace-grails/gateListener/src/gateListener/pass.hypervisor.properties')
props.load(propsFile.newDataInputStream())
// println props.getProperty('pass.async.queue')
def queueName=props.getProperty('pass.send.queue')
println "sender"+queueName
use(JmsCategory) {
def jms = new ActiveMQConnectionFactory('tcp://pass-dev01.unx.sas.com:61616')
jms.connect { c ->
c.queue(queueName) { q ->
def msg = createTextMessage("test")
q.send(msg)
}
}
}
}
}
如果有人有解决方案,请告诉我。
答案 0 :(得分:0)
我修复了这个问题,我导入了错误的库。我不得不使用JMS Listerner库import javax.jms.MessageListener
而不是Groovy Message Listener。
此外,我必须传递实现侦听器的类的obkject:
cons.setMessageListener(new JMSListener());
这是有效的。它调用onMessage