简体   繁体   English

Spring JMS - 无法使用嵌入式代理连接到代理 URL

[英]Spring JMS - Unable to connect to broker URL with embedded Broker

Here's my JmsMessageSender这是我的 JmsMessageSender

@Service
public class JmsMessageSender {

    @Autowired
    private JmsTemplate jmsTemplate;


    /**
     * send text to default destination
     * @param text
     */
    public void send(final String text) {

        this.jmsTemplate.send(new MessageCreator() {
            @Override
            public Message createMessage(Session session) throws JMSException {
                Message message = session.createTextMessage(text);
                return message;
            }
        });
    }

    /**
     * Simplify the send by using convertAndSend
     * @param text
     */
    public void sendText(final String text) {
        this.jmsTemplate.convertAndSend(text);
    }

    /**
     * Send text message to a specified destination
     * @param text
     */
    public void send(final Destination dest,final String text) {

        this.jmsTemplate.send(dest,new MessageCreator() {
            @Override
            public Message createMessage(Session session) throws JMSException {
                Message message = session.createTextMessage(text);
                return message;
            }
        });
    }
}

Here's my DemoClass这是我的 DemoClass

public class DemoMain {

    public static void main(String[] args) {
        // init spring context
        ApplicationContext ctx = new ClassPathXmlApplicationContext("context.xml");

        // get bean from context
        JmsMessageSender jmsMessageSender = (JmsMessageSender)ctx.getBean("jmsMessageSender");

        // send to default destination
        jmsMessageSender.send("hello JMS");

        // send to a code specified destination
        Queue queue = new ActiveMQQueue("AnotherDest");
        jmsMessageSender.send(queue, "hello Another Message");

        // close spring application context
        ((ClassPathXmlApplicationContext)ctx).close();
    }

}

My context.xml我的上下文.xml

and my activemq.xml configuration.和我的 activemq.xml 配置。

<beans
        xmlns="http://www.springframework.org/schema/beans"
        xmlns:amq="http://activemq.apache.org/schema/core"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

    <!-- Allows us to use system properties as variables in this configuration file -->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <value>file:${activemq.conf}/credentials.properties</value>
        </property>
    </bean>

    <!--
        The <broker> element is used to configure the ActiveMQ broker.
    -->
    <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="activemq-data">

        <!--
            For better performances use VM cursor and small memory limit.
            For more information, see:

            http://activemq.apache.org/message-cursors.html

            Also, if your producer is "hanging", it's probably due to producer flow control.
            For more information, see:
            http://activemq.apache.org/producer-flow-control.html
        -->

        <destinationPolicy>
            <policyMap>
                <policyEntries>
                    <policyEntry topic=">" producerFlowControl="true">
                        <!-- The constantPendingMessageLimitStrategy is used to prevent
                             slow topic consumers to block producers and affect other consumers
                             by limiting the number of messages that are retained
                             For more information, see:

                             http://activemq.apache.org/slow-consumer-handling.html

                        -->
                        <pendingMessageLimitStrategy>
                            <constantPendingMessageLimitStrategy limit="1000"/>
                        </pendingMessageLimitStrategy>
                    </policyEntry>
                    <policyEntry queue=">" producerFlowControl="true" memoryLimit="1mb">
                        <!-- Use VM cursor for better latency
                             For more information, see:

                             http://activemq.apache.org/message-cursors.html

                        <pendingQueuePolicy>
                          <vmQueueCursor/>
                        </pendingQueuePolicy>
                        -->
                    </policyEntry>
                </policyEntries>
            </policyMap>
        </destinationPolicy>


        <!--
            The managementContext is used to configure how ActiveMQ is exposed in
            JMX. By default, ActiveMQ uses the MBean server that is started by
            the JVM. For more information, see:

            http://activemq.apache.org/jmx.html
        -->
        <managementContext>
            <managementContext createConnector="false"/>
        </managementContext>

        <!--
            Configure message persistence for the broker. The default persistence
            mechanism is the KahaDB store (identified by the kahaDB tag).
            For more information, see:

            http://activemq.apache.org/persistence.html
        -->
        <persistenceAdapter>
            <kahaDB directory="activemq-data/kahadb"/>
        </persistenceAdapter>


        <!--
          The systemUsage controls the maximum amount of space the broker will
          use before slowing down producers. For more information, see:
          http://activemq.apache.org/producer-flow-control.html
          If using ActiveMQ embedded - the following limits could safely be used:

      <systemUsage>
          <systemUsage>
              <memoryUsage>
                  <memoryUsage limit="20 mb"/>
              </memoryUsage>
              <storeUsage>
                  <storeUsage limit="1 gb"/>
              </storeUsage>
              <tempUsage>
                  <tempUsage limit="100 mb"/>
              </tempUsage>
          </systemUsage>
      </systemUsage>
      -->
        <systemUsage>
            <systemUsage>
                <memoryUsage>
                    <memoryUsage limit="64 mb"/>
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="100 gb"/>
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="50 gb"/>
                </tempUsage>
            </systemUsage>
        </systemUsage>

        <!--
            The transport connectors expose ActiveMQ over a given protocol to
            clients and other brokers. For more information, see:

            http://activemq.apache.org/configuring-transports.html
        -->
        <transportConnectors>
            <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
            <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
        </transportConnectors>

        <!-- destroy the spring context on shutdown to stop jetty -->
        <shutdownHooks>
            <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" />
        </shutdownHooks>
    </broker>
</beans>

However when I run my main class this error shows.但是,当我运行主类时,会显示此错误。 Did I miss anything in the config?我错过了配置中的任何内容吗?

Caused by: javax.jms.JMSException: Could not connect to broker URL: tcp://192.168.203.143:61616. Reason: java.net.ConnectException: Connection timed out: connect

Have you started the AMQ-broker on tcp://192.168.203.143:61616 ?您是否在 tcp://192.168.203.143:61616 上启动了 AMQ 代理? If not then starting it should solve the problem.如果没有,那么启动它应该可以解决问题。

Had simillar Errors.有类似的错误。 Heres solution.这里的解决方案。

try to connect to borker at your ip address Could not connect to broker URL: tcp://192.168.203.143:61616.尝试通过您的 IP 地址连接到 borker 无法连接到代理 URL:tcp://192.168.203.143:61616。 above mentioned ip address is relevent to Example's System.上面提到的 ip 地址与示例系统有关。

在此处输入图片说明

try to run same code for your ip address.(Know your ipAddress in network settings or command "ipconfig")尝试为您的 ip 地址运行相同的代码。(在网络设置或命令“ipconfig”中知道您的 ipAddress)
Could not connect to broker URL: tcp://192.168.1.184:61616.无法连接到代理 URL:tcp://192.168.1.184:61616。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM