我是 Spring AMQP / Rabbit MQ 的新手。
我在我的项目中使用 Spring AMQP / Rabbit MQ。运行 tomcat 后遇到以下错误:
org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer - 消费者引发异常,如果连接工厂支持,处理可以重新启动。
异常总结:org.springframework.amqp.AmqpConnectException: java.net.ConnectException:连接被拒绝:连接
以下是配置文件:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">
<rabbit:connection-factory id="connectionFactory" host="127.0.0.1"/>
<rabbit:admin connection-factory="connectionFactory"/>
<rabbit:template connection-factory="connectionFactory" id="rabbitTemplate" channel-transacted="true"/>
<rabbit:queue name="proposalQueue" />
<rabbit:listener-container connection-factory="connectionFactory">
<rabbit:listener ref="listener" queue-names="proposalQueue"/>
</rabbit:listener-container>
<bean id="rabbitMQTransactionManager" class="org.springframework.amqp.rabbit.transaction.RabbitTransactionManager">
<property name="connectionFactory" ref="connectionFactory"/>
</bean>
<rabbit:direct-exchange name="myExchange">
<rabbit:bindings>
<rabbit:binding queue="proposalQueue" key="userMesssage" />
</rabbit:bindings>
</rabbit:direct-exchange>
<bean id="listener" class="com.xxx.xxxx.rabbitmq.QueueServer"/>
</beans>
@Override
public void onMessage(Message message) {
Map<String, Object> result = new HashMap<>();
MessageProperties props = message.getMessageProperties();
BasicProperties replyProps = new BasicProperties.Builder().correlationId(new String(message.getMessageProperties().getCorrelationId())).build();
String inputParameterStr = new String(message.getBody());
try {
Map<String,Object> inputParameters = (Map<String, Object>) Utility.StringToObject(inputParameterStr, "java.util.Map");
result = service.createQueue(inputParameters);
} catch (ClassNotFoundException e) {
logger.error("Error :::: "+getClass()+proposalID, e);
result.put(Constants.FAILURE, e.getMessage());
} catch (Exception e) {
logger.error("Error :::: "+getClass()+proposalID, e);
result.put(Constants.FAILURE, e.getMessage());
}
}
请帮忙解决。
java.net.ConnectException:连接被拒绝:连接
这仅仅意味着 RabbitMQ 没有在标准端口 (5672) 上的
localhost
(127.0.0.1
) 上运行。
您是否下载并安装/运行了 RabbitMQ?它不像 ActiveMQ - 它不能嵌入在 java 应用程序中运行。
问题还有一方面。
默认情况下,RabbitMQ只能在本地机器上访问。如果您想从其他机器访问它,通常会在“rabbitmq.config”文件中创建一个条目。该文件的位置因操作系统而异。在 Linux 中,您可以在以下位置找到它:“/etc/rabbitmq/rabbitmq.config”,在 Windows 机器中,您可以在以下位置找到它:“C:\Program Files\RabbitMQ Server” abbitmq_server-3.6.9 tc abbitmq.config”。
您可能在上述位置找不到此文件。这是一个可选文件,即使丢失也不必担心。您可以创建自己的。该条目类似于:
[{rabbit, [{tcp_listeners, [{"<IP_OF_MACHINE>", 5672}]},{loopback_users, []}]}].
有了这个,您可以从任何远程计算机访问服务器。
如果此后您无法访问服务器,您可以将条目修改为:
[{rabbit, [{tcp_listeners, [{"0.0.0.0", 5672}]},{loopback_users, []}]}].
您将肯定让服务器连接到任何客户端以及通过管理控制台(如果启用了插件)
我遇到了同样的问题(使用docker时)。上面的答案对我没有帮助。我切换到了不同版本的rabbitmq。
是:
rabbitmq:3.9.14-management-alpine
现在:
rabbitmq:3.9.8-management-alpine
为了访问 RabbitMQ 远程,您需要允许端口 4369、25672、5671、5672、15672、61613、61614、1883 和 8883 上的入站 TCP 流量。
sudo firewall-cmd --zone=public --permanent --add-port=4369/tcp --add-port=25672/tcp --add-port=5671-5672/tcp --add-port=15672/tcp --add-port=61613-61614/tcp --add-port=1883/tcp --add-port=8883/tcp
sudo firewall-cmd --reload
我也遇到了同样的问题,因为我的rabbitmq容器没有运行