【发布时间】:2012-03-20 07:26:33
【问题描述】:
我有两个项目,一个是服务项目,另一个是消费者项目,
消费者项目使用其他项目的服务,调用应该使用 JMS 异步
我在两个项目中都安装了 jms 插件
我已经在resources.groovy 中定义了两个项目中的JMSConnectionFactory,如下所示
import org.springframework.jms.connection.SingleConnectionFactory
import org.apache.activemq.ActiveMQConnectionFactory
beans = {
jmsConnectionFactory(org.apache.activemq.ActiveMQConnectionFactory) { brokerURL = 'vm://localhost' }
}
注意:这两个项目现在都在同一台机器上(即本地主机)
现在从消费者的控制器我正在从 ServiceProvider 项目调用服务
jmsService.send(service:'serviceProvider', params.body)
在ServiceProvider中服务定义如下
import grails.plugin.jms.*
class ServiceProviderService {
def jmsService
static transactional = true
static exposes = ['jms1']
def createMessage(msg) {
print "Called1"
sleep(2000) // slow it down
return null
}
}
现在,当控制器提交对服务的调用时,它会成功提交,但没有到达实际的服务
我也试过
jmsService.send(app: "ServiceProvider", service: "serviceProvider", method: "createMessage", msg, "standard", null)
更新
现在我已经为服务提供商安装了activeMQ插件,使其成为嵌入式代理(jms已经存在)
并创建了一个服务
package serviceprovider
class HelloService {
boolean transactional = false
static exposes = ['jms']
static destination = "queue.notification"
def onMessage(it){
println "GOT MESSAGE: $it"
}
def sayHello(String message){
println "hello"+message
}
}
resources.groovy 在这两个项目中现在都是
import org.springframework.jms.connection.SingleConnectionFactory
import org.apache.activemq.ActiveMQConnectionFactory
beans = {
jmsConnectionFactory(org.apache.activemq.ActiveMQConnectionFactory) { brokerURL = 'tcp://127.0.0.1:61616' }
}
从消费者的控制器,我像下面这样调用这个服务
jmsService.send(app:'queue.notification',service:'hello',method: 'sayHello', params.body)
对方法的调用被提交,但实际上它没有被调用!
【问题讨论】:
标签: spring grails jms activemq