zoukankan      html  css  js  c++  java
  • rabbitMQ Connection timed out

    在VM中部署了一个rabbitMQ server ,在物理机上按照rabbitMQ官网上的 java的教程访问VM中的rabbitMQ报如下错误:

    Exception in thread "main" java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at com.rabbitmq.client.impl.FrameHandlerFactory.create(FrameHandlerFactory.java:32)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:714)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:760)
    at Send.main(Send.java:16)

    代码示例:

    import com.rabbitmq.client.ConnectionFactory;
    import com.rabbitmq.client.Connection;
    import java.util.concurrent.TimeoutException;
    import com.rabbitmq.client.Channel;
    
    public class Send {
        private final static String QUEUE_NAME = "hello";
    
        public static void main(String[] args) throws java.io.IOException, TimeoutException {
    
                ConnectionFactory factory = new ConnectionFactory();
                factory.setHost("192.168.198.100");
                factory.setPort(5672);
                Connection connection = factory.newConnection();
                Channel channel = connection.createChannel();
    
                channel.queueDeclare(QUEUE_NAME, false, false, false, null);
                String message = "Hello World from Windows!";
                channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
                System.out.println(" [x] Sent '" + message + "'");
    
                channel.close();
                connection.close();
    
            }
        }

    解决方案:

    第一步.上面代码默认是使用rabbitMQ的默认用户“guest”作为登录用户,但是该用户不用许远程IP登录,所以我们需要自己在rabbitMQ中新增一个用户

    //新增admin 密码admin
    rabbitmqctl add_user admin admin    
    //将admin用户设置为administrator rabbitmqctl set_user_tags admin administrator
    //给admin所有的权限 rabbitmqctl set_permissions
    -p / admin".*" ".*" ".*"

      然后增加如下Java代码:

    factory.setPassword("test");
    factory.setUsername("test");

    第二.开启rabbitMQ的管理UI界面

    rabbitmq-plugins enable rabbitmq_management

    第三.检查防火墙是否开启了5672和15672端口,Centos7如何开启端口看这里

    使用telnet测试

    扩展.常见错误

    1、如果写错了host (如:factory.setHost("locathost"); )报错:

    Exception in thread "main" Java.NET.UnknownHostException: locathost
    at java.Net.PlainSocketImpl.connect(PlainSocketImpl.java:195)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at com.rabbitmq.client.impl.FrameHandlerFactory.create(FrameHandlerFactory.java:32)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:588)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:612)
    at com.aaa.test.Send.main(Send.java:19)

    2、如果写错端口PORT(如:factory.setPort(5678);) 报错:

    Exception in thread "main" java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at com.rabbitmq.client.impl.FrameHandlerFactory.create(FrameHandlerFactory.java:32)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:588)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:612)
    at com.aaa.test.Send.main(Send.java:19)

    3、如果写错用户名或者密码,报错:

    Exception in thread "main" com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. 
    For details see the broker logfile. at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:
    338) at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:590) at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:612) at com.aaa.test.Send.main(Send.java:19)
  • 相关阅读:
    C#如何不使用递归实现无限层次结构的代码分享[转]
    asp.net mvc2 templates的一篇文章
    asp.net mvc Model验证总结及常用正则表达式
    关于IE的Ajax请求结果缓存的问题
    在ASP.NET MVC中如何让ASCX用户控件具有Action / Controller
    Kubernetes之Pod介绍
    Docker 之Swarm介绍
    Docker之多机网络
    Kubernetes之Pod调度
    Docker之隔离技术
  • 原文地址:https://www.cnblogs.com/liaojie970/p/6142049.html
Copyright © 2011-2022 走看看