2012-03-01 57 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