2024年Java最全ActiveMQ——Java连接ActiveMQ(点对点)(2),java面试常问

文章强调了面试中的自信和表达能力,并分享了蚂蚁技术面试中的常见问题,包括MySQL、Spring、Redis、JVM等技术的题目。同时详细介绍了ActiveMQ消息队列的消费者和生产者行为,以及同步和异步消息消费的方式。还推荐了一份详尽的MySQL学习笔记,有助于提升面试准备和解决实际工作中的问题。
摘要由CSDN通过智能技术生成

总结

面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。

以上就是蚂蚁技术四面和HR面试题目,以下最新总结的最全,范围包含最全MySQL、Spring、Redis、JVM等最全面试题和答案,仅用于参考

一份还热乎的蚂蚁金服面经(已拿Offer)面试流程4轮技术面+1轮HR

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

ActiveMQ——Java连接ActiveMQ(点对点)

通过该界面不难发现,我们在代码中定义了一个队列名称为 queue01,该界面显示的队列名称就是我们手动设置的

Queues 说明:

ActiveMQ——Java连接ActiveMQ(点对点)

总结

当有一个消息进入这个队列时,等待消费的消息是 1,进入队列的消息是 1

当消息消费后,等待消费的消息是 0,进入队列的消息是 1,出队列的消息是 1

再来一条消息时,等待消费的消息是 1,进入队列的消息就是 2

消息消费者

package com.java.elasticsearch.activemq;

import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;/**

* @author Woo_home

* @create by 2020/5/3 0:51

*/

public class JmsConsumer {

// 定义 MQ 连接地址

private static final String ACTIVE_MQ_URL = “tcp://localhost:61616”;

// 定义队列名称

private static final String QUEUE_NAME = “queue01”;

public static void main (String[] args) throws JMSException {

// 1、创建连接工厂

ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory();

// 2、通过连接工厂,获得连接 Connection

Connection connection = activeMQConnectionFactory.createConnection();

connection.start();

///3、创建会话

// 两个参数,第一个叫事务 / 第二个叫签收

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

// 4、创建目的地(具体是队列还是主题 Topic)

Queue queue = session.createQueue(QUEUE_NAME);// 5、创建消费者

MessageConsumer messageConsumer = session.createConsumer(queue);while (true) {

// 同步阻塞方式(receive)

// 因为消息生产者是 TextMessage,所以这里需要转换一下

TextMessage textMessage = (TextMessage) messageConsumer.receive();

if (null != textMessage) {

System.out.println (“****** 消费者接收到消息 ******:” + textMessage.getText());

} else {

break;

}

}

// 关闭资源

messageConsumer.close();

session.close();

connection.close();

}

}

在运行消费端代码之前,再观察一下该界面 http://localhost:8161/admin/queues.jsp

ActiveMQ——Java连接ActiveMQ(点对点)

此时有 3 条消息等待被消费,然后我们运行一下消费端代码

ActiveMQ——Java连接ActiveMQ(点对点)

控制台输出,消费端已经接收到生产者的消息

ActiveMQ——Java连接ActiveMQ(点对点)

然后再看下 Queues 界面 http://localhost:8161/admin/queues.jsp

ActiveMQ——Java连接ActiveMQ(点对点)

此时消息已经出现 3 条,有一个消费者

消息消费者 receive() 方法说明

在上面的代码中有一个 receive 方法,会一直在等待

ActiveMQ——Java连接ActiveMQ(点对点)

在 Queues 界面中也会显示有一个客户一直在消费

ActiveMQ——Java连接ActiveMQ(点对点)

这是因为 receive 默认是一直等待的,还有一个 receive(timeout) 是可以设置时间的

如下:

// 只会等待 4 s

TextMessage textMessage = (TextMessage) messageConsumer.receive(4000L);

消息消费者 MessageListener 方法说明

package com.java.elasticsearch.activemq;

import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;import java.io.IOException;/**

* @author Woo_home

* @create by 2020/5/3 0:51

*/

public class JmsConsumer {

// 定义 MQ 连接地址

private static final String ACTIVE_MQ_URL = “tcp://localhost:61616”;

// 定义队列名称

private static final String QUEUE_NAME = “queue01”;

public static void main(String[] args) throws JMSException, IOException {

// 1、创建连接工厂

ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory();

// 2、通过连接工厂,获得连接 Connection

Connection connection = activeMQConnectionFactory.createConnection();

connection.start();

///3、创建会话

// 两个参数,第一个叫事务 / 第二个叫签收

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

// 4、创建目的地(具体是队列还是主题 Topic)

Queue queue = session.createQueue(QUEUE_NAME);// 5、创建消费者

MessageConsumer messageConsumer = session.createConsumer(queue);// 通过监听的方式来消费消息 MessageConsumer messageConsumer = session.createConsumer(queue)

messageConsumer.setMessageListener (new MessageListener() {@Overridepublic void onMessage (Message message) {if (null != message && message instanceof TextMessage) {

TextMessage textMessage = (TextMessage) message;try {System.out.println(“****** 消费者接收到消息 ****** :” + textMessage.getText());

} catch (JMSException e) {e.printStackTrace();}}}});System.in.read();

// 关闭资源

messageConsumer.close();session.close();connection.close();}}

使用 MessageListener 的作用是有消息就消费,没消息就等待

总结

ActiveMQ——Java连接ActiveMQ(点对点)

两种消费方式

同步阻塞方式(receive())

订阅者或者接收者调用 MessageConsumer 的 receive() 方法来接收消息,receive 方法在能够接收到消息之前(或者超时之前)将一直阻塞
异步非阻塞方式(监听器 onMessage())
订阅者或接收者通过 MessageConsumer 的 setMessageListener(MessageListener listener) 注册一个消息监听器
当消息到达之后,系统自动调用监听器 MessageListener 的 onMessage(Message message)

总结

本文从基础到高级再到实战,由浅入深,把MySQL讲的清清楚楚,明明白白,这应该是我目前为止看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!

MySQL50道高频面试题整理:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

前为止看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!

MySQL50道高频面试题整理:

[外链图片转存中…(img-Y2r220kP-1714849225821)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你想了解如何使用Java连接ActiveMQ并查看topic消息,可以按照以下步骤操作: 1. 下载并安装ActiveMQ。可以从官网下载最新的ActiveMQ安装包,并按照安装向导进行安装。 2. 创建Java项目并导入ActiveMQ相关的jar包。可以使用Maven管理项目依赖,添加以下依赖: ```xml <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.16.2</version> </dependency> ``` 3. 创建连接和会话。可以使用以下代码创建连接和会话: ```java // 创建连接工厂 ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); // 创建连接 Connection connection = connectionFactory.createConnection(); // 启动连接 connection.start(); // 创建会话 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); ``` 4. 创建topic和消息消费者。可以使用以下代码创建topic和消息消费者: ```java // 创建topic Topic topic = session.createTopic("test.topic"); // 创建消息消费者 MessageConsumer consumer = session.createConsumer(topic); ``` 5. 接收消息。可以使用以下代码接收消息: ```java // 接收消息 Message message = consumer.receive(); if (message instanceof TextMessage) { TextMessage textMessage = (TextMessage) message; System.out.println("Received message: " + textMessage.getText()); } ``` 这样就可以使用Java连接ActiveMQ并查看topic消息了。当然,还有其他更详细的操作可以参考ActiveMQ官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值