【问题标题】:Invoking remote service using JMS使用 JMS 调用远程服务
【发布时间】: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


    【解决方案1】:

    如果您使用单独的进程,那么您需要使用与 VM 不同的传输(仅用于单个 VM),此外,您的进程之一是否启动了代理?如果不是,那么其中一个应该嵌入代理(或在外部运行)并通过传输(如 TCP)公开它...

    【讨论】:

      【解决方案2】:

      虚拟机中的 activemq 配置 (vm://localhost) 仅适用于单个虚拟机。如果您的 2 个项目在不同的虚拟机中运行,请尝试设置外部 AMQ 代理。

      【讨论】:

        猜你喜欢
        • 2012-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-09
        • 2017-03-07
        • 2019-06-08
        • 2010-12-20
        • 2015-01-09
        相关资源
        最近更新 更多