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がlocalhost
(127.0.0.1
)標準ポート(5672)。
RabbitMQをダウンロードしてインストール/実行しましたか? ActiveMQとは異なり、Javaアプリケーションに埋め込まれて実行することはできません。
問題にはもう1つの側面があります。
デフォルトでは、RabbitMQはローカルマシンからのみアクセス可能です。他のマシンからアクセスしたい場合は、通常「rabbitmq.config」ファイルに1つのエントリを作成します。このファイルの場所はOSによって異なります。 Linuxでは、「/ etc/rabbitmq/rabbitmq.config」で検索できます。Windowsマシンでは、「C:\ Program Files\RabbitMQ Server\rabbitmq_server-3.6.9\etc\rabbitmq.config ".
上記の場所にこのファイルが見つからない可能性があります。これはオプションのファイルであり、紛失しても心配する必要はありません。独自に作成できます。このエントリは次のようなものです。
[{rabbit, [{tcp_listeners, [{"<IP_OF_MACHINE>", 5672}]},{loopback_users, []}]}].
これにより、任意のリモートマシンからサーバーにアクセスできます。
この後、サーバーにアクセスできない場合、エントリを次のように変更できます。
[{rabbit, [{tcp_listeners, [{"0.0.0.0", 5672}]},{loopback_users, []}]}].
確定的にサーバーを任意のクライアントに接続するとともに、管理コンソール(プラグインが有効な場合)を介して接続します。
RabbitMQ remoteにアクセスするには、インバウンドTCPポート4369、25672、5671、5672、15672、61613、61614、1883、8883のトラフィックを許可する必要があります。
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