远程JMS队列实现

时间:2014-06-11 16:33:03

标签: jboss jms

美好的一天

我还想问一些帮助/澄清,因为我是实施JMS的新手,我已经去过以下链接

从连接到jboss-as7 hornetq的客户端

“无法创建会话工厂” [HORNETQ-952]当绑定AS到0.0.0.0远程HornetQ客户端失败时 - JBoss Issue Tracker https://issues.jboss.org/browse/JBPAPP-9393

请问您如何在 JBOss 7.1.1.Final 上进行JMS队列远程处理? 我在我的连接中使用RemoteConnectionFactory 我是否需要将我的远程(172.45.45.45)jboss服务器绑定到特定的IP地址才能远程连接到它?就像在启动jboss时传递-b IPAddress一样? 或像这样在standalone.conf上配置它 在远程IP /jboss/bin/standalone.conf中(我真的需要这个吗?)

# set this value so we can send JMS messages from remote clients
JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=172.45.45.45”

这是我想在我的本地笔记本电脑上向我的队列发送JMS消息的场景,我有一个我的队列发布者和172.45.45.45(远程IP)web.war()部署在该远程IP和我将我的消费者配置为此队列

   <jms-queue name=“testqueue">
                    <entry name="java:jboss/queue/mss/testqueue"/>
                    <durable>true</durable>
                </jms-queue>

我已将Jboss应用程序用户配置为guest角色 我在standalone.xml中有我的队列配置(standalone-full.xml的副本) 我有我的JMS发布者/消费者

如果我在下面有以下配置,远程发送JMS消息工作正常。没有它我得到一个错误= 2无法连接到服务器

我的本​​地etc / hosts配置该IP(我真的需要这个吗?)     在此处输入代码     172.45.45.45 ip-172-45-45-45.ec2.internal

远程Jboss服务器配置 在远程IP /jboss/bin/standalone.conf中(我真的需要这个吗?)

#set this value so we can send JMS messages from remote clients
JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=172.45.45.45”

BTW我遵循了本教程 http://theopentutorials.com/examples/java-ee/ejb3/remote-jms-client-and-ejb3-mdb-consumer-eclipse-jboss-7-1/

在没有以下配置的情况下,需要有关远程实现JMS队列的帮助 我的本地etc / hosts配置该IP(我真的需要这个吗?)     172.45.45.45 ip-172-45-45-45.ec2.internal

远程Jboss服务器配置 在远程IP /jboss/bin/standalone.conf中(我真的需要这个吗?)

#set this value so we can send JMS messages from remote clients
JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=172.45.45.45”

以下是我的JMS发布商的代码段

private static String username = "testuser";
private static String password = "testpass";
private static String host = "remote://172.45.45.45:4447";


Properties jndiProps = new Properties();
try {
jndiProps.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
jndiProps.put(Context.PROVIDER_URL, host);
jndiProps.put(Context.SECURITY_PRINCIPAL, username);
jndiProps.put(Context.SECURITY_CREDENTIALS, password);

Context context = new InitialContext(jndiProps);
ConnectionFactory connectionFactory = (ConnectionFactory)    context.lookup("jms/RemoteConnectionFactory");
connection = connectionFactory.createConnection(username, password);
topic = (Topic) context.lookup("jms/topic/testTopic");
System.out.println("Connected to JMS");
connection.start();

来自我的消费者的示例代码段

/**
* Message-Driven Bean implementation class for: MDBSample- This is for Consume the Queue
*/
@MessageDriven(activationConfig = {@ActivationConfigProperty(propertyName =  "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/queue/test"),
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge")})
public class MessageConsumer implements MessageListener {

/**
 * Default constructor.
 */
public MessageConsumer() {

}

/**
 * @see MessageListener#onMessage(Message)
 */
public void onMessage(Message message) {

    try {
     ObjectMessage msg = (ObjectMessage) message;
     JMSMessage jmsMessage = (JMSMessage) msg.getObject();
        System.out.println("Received message is ==========> " + jmsMessage.getAction());
    } catch (JMSException e) {

        e.printStackTrace();
    }

}

}

任何想法或建议?

0 个答案:

没有答案