为了账号安全,请及时绑定邮箱和手机立即绑定

ActiveMQ发送消息出现连接失效问题

最近玩起了Docker和ActiveMQ之后,想起可以在Docker中搭建一个ActiveMQ容器来运行ActiveMQ环境,当我费劲千辛终于搭建好了容器之后,我照着老师的代码做了一遍,发现出现了连接失败问题,起初我以为是我的容器端口映射出现了问题,我在本地连接容器是完全没有问题的,然后我翻阅ActiveMQ的文档发现使用的传送协议是TCP协议,我有回头将容器的TCP协议端口打开了,发现还是不行,请大家帮我看看是哪里出现了问题。

http://img1.sycdn.imooc.com//596ccb630001431311210432.jpg

http://img1.sycdn.imooc.com//596ccb640001e11213320430.jpg

下面是我程序主要代码

private static final String MQ_USER = ActiveMQConnection.DEFAULT_USER;

   private static final String MQ_PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;

   private static final String MQ_ADDRESS = "tcp://192.168.1.106:32769";

   private static final int SEND_NUMBER = 50;

   public static void main(String[] args){
       Connection connection = null;
       Session session = null;
       try {
           ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                   MQ_USER, MQ_PASSWORD, MQ_ADDRESS);
           connection = connectionFactory.createConnection();
           connection.start();
           session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
           //消息接受者,消息发送目的地
           Destination destination = session.createQueue("testSendQueue1");
           //消息发送者
           MessageProducer producer = session.createProducer(destination);
           //不进行持久化
//            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
           sendMessage(session, producer);
           session.commit();
       } catch (JMSException e) {
           e.printStackTrace();
       } catch (Exception e) {
           e.printStackTrace();
       } finally {
           try {
               if(session != null){
                   session.close();
               }
               if(connection != null){
                   connection.close();
               }
           } catch (JMSException e) {
               e.printStackTrace();
           }
       }
   }

   public static void sendMessage(Session session, MessageProducer producer)
           throws Exception {
       for (int i = 1; i <= SEND_NUMBER; i++) {
           TextMessage message = session
                   .createTextMessage("ActiveMq 发送的消息" + i);
           // 发送消息到目的地方
           System.out.println("发送消息:" + "ActiveMq 发送的消息 : " + i);
           producer.send(message);
       }
   }

正在回答

1 回答

管理台的端口和tcp连接的端口是不一样的,默认管理台的端口是8161,tcp连接端口是61616 你需要把两个端口都-p出来

0 回复 有任何疑惑可以回复我~
#1

小丑鱼yang 提问者

原本我是已经关闭了虚拟机准备洗洗睡了,老师你这一句话提醒了我,这正是忽略的一个小细节,我又重新运行容器查询其端口发现确实有一个8161的端口映射了,然后我更改了我在代码中设置的端口的确成功了,谢谢老师。
2017-07-17 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

ActiveMQ发送消息出现连接失效问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信