문제

이 간단하게 보이지만 나를 찾을 수 없습니 간단한 대답이다.

내가 원하는 연결을 열 원격 JMS 브로커(IP 및 포트를 알려진),열린 세션에는 특정 큐(이름을 알려진)와 메시지를 이 큐가 있습니다.

어떤 간단한 Java API(표준 가능한 경우)해야 할까요?


편집

인 이해하는 것이 지금 JMS 드라이버 사양처럼 JDBC 지의 통신 프로토콜로 나는 생각했다.

주 내에서 실행 JBoss,내가 여전히 이해하지 못하는 방법을 만들기 JBossConnectionFactory.


편집

실제로 했다면 문제가 어떤 생각을(음)면 JMS 될 필요가 처리와 같은 JDBC,다음을 사용할 필요가 클라이언트에 의해 제공됩 내 MQ 구현합니다.때문에 우리가 사용하는 SonicMQ 에 대한 우리의 브로커고,내가 결정 포함 sonic_Client.jar 라이브러리 제공으로 SonicMQ.

이것은 작업에서 독립 Java 응용 프로그램에서 우리의 JBoss 서비스입니다.

도움을 주셔서 감사합니다

도움이 되었습니까?

해결책

를 사용해야 합니다 JMS,만들기 QueueConnectionFactory 고 거기에서 이동합니다.한 방법을 정확하게 만들기 QueueConnectionFactory 됩 공급업체 관련(JMS 은 기본적으로 드라이버 사양에 대한 메시지 큐로 JDBC 가를 위한 데이터베이스)하지만에 IBM MQ 그것은 무언가 이것을 좋아한다:

MQQueueConnectionFactory connectionFactory = new MQQueueConnectionFactory();
connectionFactory.setHostName(<hostname>);
connectionFactory.setPort(<port>);
connectionFactory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
connectionFactory.setQueueManager(<queue manager>);
connectionFactory.setChannel("SYSTEM.DEF.SVRCONN");

QueueConnection queueConnection = connectionFactory.createQueueConnection();
QueueSession queueSession = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

Queue queue = queueSession.createQueue(<queue name>);

QueueSender queueSender = session.createSender(queue);
QueueReceiver queueReceiver = session.createReceiver(queue); 

편집(다음과 같은 질문을 편집)

에 액세스 할 수있는 가장 좋은 방법 원격 큐,또는 큐,그 문제에 대한 추가하는 것입 Queue 인스턴스를 JNDI 레지스트리에 있습니다.원격 큐에서 이를 사용하여 달성 Mbean 는 추가 Queue 인스턴스 때문에 서버가 시작됩니다.

살펴보 http://www.jboss.org/community/wiki/UsingWebSphereMQSeriesWithJBossASPart4, 는 동안 그것은 예 IBM MQ,본질적으로 무엇이 있을 연결하는 모든 원격 큐가 있습니다.

에서 보면 jbossmq-destinations-service.xmlorg.jboss.mq.server.jmx 당신이 볼 수 Mbean 당신을 만들어야와 관련하여서는 JBoss 큐가 있습니다.

다른 팁

다음은 다음을 사용하여 SonicMQ 브로커에 연결하는 데 사용한 코드입니다. sonic_Client.jar 도서관:

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;


public class JmsClient
{
    public static void main(String[] args) throws JMSException
    {
        ConnectionFactory factory = new progress.message.jclient.ConnectionFactory("tcp://<host>:<port>", "<user>", "<password>");
        Connection connection = factory.createConnection();

        try
        {
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            try
            {
                MessageProducer producer = session.createProducer(session.createQueue("<queue>"));
                try
                {
                    producer.send(session.createTextMessage("<message body>"));
                }
                finally
                {
                    producer.close();
                }
            }
            finally
            {
                session.close();
            }
        }
        finally
        {
            connection.close();
        }
    }
}

실제로 저는 JBOSS 4를 사용하고 있으며 JNDI는 사용하기 어렵지 않습니다.

우선 JNDI가 어디에서 실행되는지 알아야합니다.

내 jboss (conf jboss-service.xml)에서 다음과 같습니다.

<mbean code="org.jboss.naming.NamingService" name="jboss:service=Naming" xmbean-dd="resource:xmdesc/NamingService-xmbean.xml">
    ...
    <attribute name="Port">7099</attribute>
    ...
</mbean>

이것은 중요합니다. 이것은 당신이 연결하려는 포트입니다.

이제이 코드를 사용하여 JNDI에 쉽게 연결할 수 있습니다.

Hashtable<String, String> contextProperties = new Hashtable<String, String>();
contextProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
contextProperties.put(Context.PROVIDER_URL, "jnp://localhost:7099");

InitialContext initContext = new InitialContext(contextProperties);

이제 맥락이 있으면 연결 공장 생성을 제외하고 @Nick Holt의 답변과 매우 유사합니다.

QueueConnectionFactory connFactory = (QueueConnectionFactory) initContext.lookup("ConnectionFactory");

또한 배포 된 경우 큐를 만들 필요가 없습니다.

Queue queue = (Queue) initContext.lookup("queueName");

위의 모든 코드는 JBoss 4.2.2 GA 및 JBOSSMQ로 테스트했습니다 (JBOSSMQ는 제가 정확한 경우 4.2.3으로 JBoss 메시징으로 대체되었습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top