У меня есть два проекта, один сервисный проект, другой потребительский проект,
Потребительский проект использует сервисы другого проекта, и вызов должен быть асинхронным с использованием 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' }
}
Примечание: На данный момент оба проекта находятся на одной машине (то есть 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)
вызов метода передается, но на самом деле он не вызывается!