我能够使用中定义的资源适配器成功读取远程ActiveMQ队列https://developer.jboss.org/wiki/HowToUseOutOfProcessActiveMQWithWildFly使用Wildfly 10。它在单机版中引用了以下配置
<subsystem xmlns="urn:jboss:domain:resource-adapters:2.0">
<resource-adapters>
<resource-adapter id="activemq-rar.rar">
<module slot="main" id="org.apache.activemq.ra" />
<transaction-support>XATransaction</transaction-support>
<config-property name="UseInboundSession">
false
</config-property>
<config-property name="Password">
mypassword
</config-property>
<config-property name="UserName">
myuser
</config-property>
<config-property name="ServerUrl">
ssl://hostname:61617
</config-property>
<connection-definitions>
<connection-definition class-name="org.apache.activemq.ra.ActiveMQManagedConnectionFactory" jndi-name="java:/ConnectionFactory" enabled="true" pool-name="ConnectionFactory">
<xa-pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>20</max-pool-size>
<prefill>false</prefill>
<is-same-rm-override>false</is-same-rm-override>
</xa-pool>
</connection-definition>
</connection-definitions>
<admin-objects>
<admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndi-name="java:/activemq/projectName.queue.projectQueue" use-java-context="true" pool-name="PoolName">
<config-property name="PhysicalName">
ProjectQueue
</config-property>
</admin-object>
</admin-objects>
</resource-adapter>
</resource-adapters>
</subsystem>
为了让代码工作,我在我的监听器上使用了如下MessageDriven注释
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destination", propertyValue = "projectName.queue.projectQueue"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge")})
public class MyMDB implements MessageListener {
...
}
这是因为您基本上是将远程jndi名称硬编码到@MessageDriven注释中。我更喜欢使用物理名称,这样远程队列名称就可以更改,而不必更新代码中的注释。当我使用物理名称作为取消值时,我会得到以下错误
Failed to connect to broker [ssl://hostname:61617]: User myuser is not authorized to read from: queue://ProjectQueue: javax.jms.JMSSecurityException: User myuser is not authorized to read from: queue://ProjectQueue
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:52)
at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1399)
at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1428)
at org.apache.activemq.ActiveMQConnectionConsumer.<init>(ActiveMQConnectionConsumer.java:82)
at org.apache.activemq.ActiveMQConnection.createConnectionConsumer(ActiveMQConnection.java:1244)
at org.apache.activemq.ra.ActiveMQEndpointWorker$1.run(ActiveMQEndpointWorker.java:140)
at org.jboss.jca.core.workmanager.WorkWrapper.run(WorkWrapper.java:223)
at org.jboss.threads.SimpleDirectExecutor.execute(SimpleDirectExecutor.java:33)
at org.jboss.threads.QueueExecutor.runTask(QueueExecutor.java:808)
at org.jboss.threads.QueueExecutor.access$100(QueueExecutor.java:45)
at org.jboss.threads.QueueExecutor$Worker.run(QueueExecutor.java:828)
at java.lang.Thread.run(Thread.java:745)
at org.jboss.threads.JBossThread.run(JBossThread.java:320)
是否有可能创建一些内部JNDI绑定,以便我的@MessageDriven注释可以绑定到该名称或admin对象上的某个配置属性?
我找到了解决办法。诀窍是“useJndi”激活ConfigProperty
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/activemq/projectName.queue.projectQueue"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "useJndi", propertyValue = "true")})
public class MyMDB implements MessageListener {
...
}
这意味着JNDI查找将在standalone中的资源适配器配置中找到定义的管理对象。xml
<resource-adapters>
...
<admin-objects>
<admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndi-name="java:/activemq/projectName.queue.projectQueue" use-java-context="true" pool-name="PoolName">
<config-property name="PhysicalName">
ProjectQueue
</config-property>
</admin-object>
</admin-objects>
</resource-adapters>
我有一个关于 IBM MQ 中使用的 .绑定文件的快速问题。我记得绑定文件指定队列名称。如果当前用作本地队列的队列名称后来更改为远程队列,但队列的名称保持不变并且权限也很好,则绑定文件是否正常工作?
我在WildFly 18服务器上部署了EJB。我想将消息发送到部署在远程WildFly 18服务器上的队列(通过ActiveMQ Artemis)。使用注入和JCA以及是否可能实现这一点? 连接工厂和队列在远程Wildfly中配置如下: 在远程服务器上,队列配置如下: 更新 下面是我的EJB试图向远程Artermis(远程wildfly内部)发送消息: 当我试图部署包含此EJB的war时,我得到一
EJB 3.0提供了定义数据库实体关系/映射的选项,如一对一,一对多,多对一和多对多关系。 以下是相关注释 - One-to-One - 对象具有一对一的关系。 例如,乘客可以一次使用单张票。 One-to-Many - 对象具有一对多的关系。 例如,父亲可以有多个孩子。 Many-to-One - 对象具有多对一关系。 例如,多个孩子有一个单身母亲。 Many-to-Many - 对象具有多对多
JNDI代表Java命名和目录接口。 它是一组API和服务接口。 基于Java的应用程序使用JNDI进行命名和目录服务。 在EJB的上下文中,有两个术语。 Binding - 这是指为EJB对象分配名称,以后可以使用。 Lookup - 这是指查找并获取EJB的对象。 在Jboss中,会话bean默认以以下格式绑定在JNDI中。 local - EJB-name/local remote - EJ
似乎所有附带nServicebus的示例项目都设置为发送者和宿主是Web角色和辅助角色(并通过角色切入点托管)。 我需要这样做: Web角色发送消息- 是否可以将本地主机配置为仅使用Azure队列存储(而不是MSMQ)? 我似乎在任何地方都找不到一个记录在案的例子。
我需要配置我的应用程序,以便发送和消费消息从/到一个队列坐在一个服务器上。我的应用程序中有以下配置。属性: 在我的控制器中: 然而,我得到了错误,说不满足的依赖通过字段'rabbit template'表示;嵌套异常为Org.SpringFramework.Beans.Factory.UnsatisfiedDependencyException。 有人帮忙吗? 错误的全部跟踪 unsatisfie