span8
span4
FME用户,你好:
我正在尝试为FME服务器配置RabbitMQ JMS客户端,但没有成功。我直接在“FMEServer\Server\lib\jms”中复制了客户端文件和依赖项。接下来,我配置了一个JMS订阅者发送消息到我的RabbibMQ服务器:
-协议:JMS
-提供程序类型或上下文:com.rabbitmq.jms.admin.RMQObjectFactory
-提供商URL:服务器名:5672
-连接工厂:com.rabbitmq. js .admin. rmqconnectionfactory
用户名和密码:OK
目的地:队列名称
当我确认我的配置时,出现以下错误消息:“无法找到名为com.rabbitmq.jms.admin.RMQObjectFactory的提供者。确保适当的库是可用的,并选择了正确的提供者。”
我错过了什么?
任何帮助都将非常感谢
谢谢你!
亚历克斯
干得好,亚历克斯!你的答案会节省我很多时间——我肯定错过了一两天。只是一些额外的细节,我能够让JMSSender和JMSReceiver在本地工作区中工作,并让FME服务器发布/订阅工作。我已经发布了对我们有用的.bindings文件。
对于本地工作区,您需要确保Jar中包含com.sun.jndi.fscontext。RefFSContextFactory位于类路径中的某个位置。我使用的是来自Maven的fscontext-4.5-b25.jar:https://mvnrepository.com/artifact/com.sun.messaging.mq/fscontext/4.5-b25。快速攻击,我把这个罐子以及RabbitMQ JMS罐进我的默认FME Java插件目录:C:\Users\
在slf4j之上配置log4j对于调试非常有用——RabbitMQ客户机代码确实输出了一些不错的跟踪。我在下面放了一个截图,里面是我用过的所有罐子。
绑定文件(在c: \ RabbitMQBindings \。我们的配置绑定)
connectionfactory/classname=javax.jms.connectionfactory connectionfactory/factoryname=com.rabbitmq.jms.admin.rmqobjectfactory;我们使用虚拟主机连接factory/refaddr/0/content=fmetest connectionfactory/refaddr/0/type=virtual host connectionfactory/refaddr/0/encoding=string connectionfactory/refaddr/1/content=127.0.0.1connectionfactory/refaddr/1/type=host connectionfactory/refaddr/1/encoding=string jms队列,其中有一个名为“jms2”的rabbitmq队列绑定到名为“jms.durable.queues:”的交换。#我把它命名得非常混乱,但是fme将使用“jms”目的地连接到它。见下面的截图。jms/classname=javax.jms.queue jms/factoryname=com.rabbitmq.jms.admin.rmqobjectfactory jms/refaddr/0/content=jms/queue jms/refaddr/0/type=name jms/refaddr/0/encoding=string jms/refaddr/1/content=true jms/refaddr/1/type=amqp jms/refaddr/1/encoding=string jms/refaddr/2/content=jms jms/refaddr/2/type=amqproutingkey jms/refaddr/2/encoding=stringjms/refaddr/3/content=com.rabbitmq.jms.admin.rmqdestination jms/refaddr/3/type=type jms/refaddr/3/encoding=string jms/refaddr/4/content=jms.durable.queues jms/refaddr/4/type=amqpexchangename jms/refaddr/4/encoding=string jms/refaddr/5/content=jms2 jms/refaddr/5/type=destinationname jms/refaddr/5/encoding=string jms/refaddr/6/content=jms2jms/refaddr/6/type=amqpqueuename jms/refaddr/6/encoding=string
FME工作区配置
谢谢你发这个!
我试过了,并取得了一些成功。
我发现要让jmsreceiver转换器实际呈现jms_内容,必须将消息头“jmstype”设置为“textmessage”
使用python(pika)发布带有标题的消息的示例:
import pika connection=pika.blockingconnection(pika.connectionparameters('localhost'))channel=connection.channel()msg_properties=pika.spec.basicproperties(headers={'jmstype':'textmessage'})channel.basic_publish(exchange='jms.durable.queues',routing_key='jms',properties=msg_properties,body='hello world!')
不过,我找不到使用jmssender转换器设置此头的方法,所以我还不知道如何“吃自己的狗粮”。
/彼得
我终于在fme服务器上成功地使用了jms rabbitmq配置。以下是我的研究结果:
有关信息,我通过绑定到队列(qu cep flight info)的ex fme flight info将消息发送到rabbitmq服务器。
安装FME服务器的服务器上的配置:
具有重要配置的.binding文件的一部分(在那里我摔坏了头;-):
#工厂参数connectionfactory/classname=javax.jms.queueconnectionfactory connectionfactory/factoryname=com.rabbitmq.jms.admin.rmqobjectfactory……;目标队列sendflightqueue/classname=javax.jms.queue sendflightqueue/factoryname=com.rabbitmq.jms.admin.rmqobjectfactory……sendflightqueue/refaddr/2/content=ex fme航班信息sendflightqueue/refaddr/2/type=amqpexchangename sendflightqueue/refaddr/2/encoding=string……
协议 | JMS |
提供者类型 | com.sun.jndi.fscontext.RefFSContextFactory |
提供者URL | 文件:c: / / jndi / |
连接工厂 | ConnectionFactory |
目的地 | SendFlightQueue |
我试着用“jmssender”转换器发送数据,但没有成功。FME引擎返回以下错误:
javax.naming.noinitialContextException:无法实例化类:com.sun.jndi.fsContext.reffsContextFactory[根异常是java.lang.ClassNotFoundException:com.sun.jndi.fsContext.reffsContextFactory]
无法使用url“file:/c:/jndi/”和初始上下文“com.sun.jndi.fscontext.reffscontextfactory”连接到jms提供程序
我希望这会有帮助
@alexpillonelfme还不支持rabbit amqp,因此不支持rabbitmq。我已将您的帖子添加到产品更改请求中,我们必须支持rabbitmq。也许可以考虑将您的请求发布到ideas页面,看看是否有其他用户对rabbitmq支持感兴趣
©2019安全亚搏在线软件公司法律