spring - 使用 JMS 调用远程服务

标签 spring grails jms activemq

我有两个项目,一个是服务项目,另一个是消费者项目,
消费者项目使用其他项目的服务,调用应该使用 JMS 异步

我在两个项目中都安装了 jms 插件

我在两个项目中都定义了 JMSConnectionFactory,如下 resources.groovy

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

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


}

注:这两个项目现在都在同一台机器上(即本地主机)

现在从消费者的 Controller 我正在从 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
    }


}

现在,当 Controller 提交对服务的调用时,它已成功提交但未到达实际服务

我也试过
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' }
}

从消费者的 Controller 我调用这个服务如下
jmsService.send(app:'queue.notification',service:'hello',method: 'sayHello',  params.body)

调用方法被提交,但实际上它没有被调用!

最佳答案

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

关于spring - 使用 JMS 调用远程服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9522350/

相关文章:

Grails Spring Security 使用电子邮件登录

.net - .NET 中是否有等效的 JMS?

java - 使用Spring插入大量分层数据

java - Flyway 和 JPA 集成

grails - g :message multiple argument passing

grails - 用户通过Feed导入时内存不足错误

java - ACTIVEMQ-发布者订阅者 Hello World 示例

java - 连接到 z/OS 上的 WebSphere MQ 的应用程序名称

java - 带有 Autowired 语句的 NullPointerException

java - Spring - 使用 applicationContext.xml 和 XXXXX-servlet.xml