2012-03-01 60 views
0

我有两个项目,一个服务项目中一个又一个消费项目的远程服务,
消费项目占用其他项目的服务和呼叫应该是异步使用JMS调用使用JMS

我在两个安装JMS插件

我在resources.groovy

import org.springframework.jms.connection.SingleConnectionFactory 
import org.apache.activemq.ActiveMQConnectionFactory 

beans = { 
     jmsConnectionFactory(org.apache.activemq.ActiveMQConnectionFactory) { brokerURL = 'vm://localhost' } 


} 

注意定义的JMSConnectionFactory在这两个项目如下项目:这两个项目现在都在同一台机器上(即本地主机)

从消费者的控制器

现在我正在调用从的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) 

调用方法被提出,但实际上它是没有得到所谓的!

回答

1

in vm activemq config(vm:// localhost)只能在单个VM内工作。如果您的两个项目在单独的VM中运行,请尝试设置外部AMQ代理。

+0

谢谢!请参阅有关更新 – 2012-03-03 20:09:25

1

如果您使用单独的进程,那么您需要使用与虚拟机不同的传输方式(仅适用于单个虚拟机),也是启动代理的进程之一?如果没有,那么他们中的一个应该嵌入代理(或者在外部运行)并将其暴露在传输(如TCP)上...

+0

谢谢!请参阅相关更新 – 2012-03-03 20:09:20