消息中间件主要分为四类:
① kafka
② RocketMq
③ RabbitMq
④ ActiveMq
四类基本共性相同:
基于api的发送和接收 | 高可用性 | 集群和容错性 | 持久化 |
---|
ActiveMq – 生产者
//给定的地址采用默认的用户名和密码
ActiveMQConnectionFactory factory=new ActiveMQConnectionFactory(Default_Url);
//通过连接获取工厂
Connection connection = factory.createConnection();
//启动工厂
connection.start();
//创建session 第一个参数 事务 第二个 签收
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建目的地 队列和主题
Queue queue = session.createQueue(MQ_NAME);
//创建消息生产者
MessageProducer producer = session.createProducer(queue);
//使用生产者发送三条消息到mq的队列
for (int i = 1; i < 3; i++) {
//创建消息
TextMessage textMessage = session.createTextMessage("msg:-----"+i);
producer.send(textMessage);
}
producer.close();
session.close();
connection.close();
System.out.println("发送到Mq完成..............");
详情见注释,通过生产者生产消息后传至队列。
通过访问activeMq的网站,查看队列信息可以看出
生产者生产的消息以成功上传到了Mq.
ActiveMq-- 消费者
ActiveMQConnectionFactory factory=new ActiveMQConnectionFactory(Default_Url);
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue(MQ_NAME);
MessageConsumer consumer = session.createConsumer(queue);
while(true){
//同步阻塞 接收消息
TextMessage receive = (TextMessage) consumer.receive();
if(null != receive){
System.out.println("消费之接收:----"+receive.getText());
}else {
break;
}
}
session.close();
connection.close();
consumer.close();
创建步骤同生产者类似。
刷新Mq可以看出,待处理邮件、消费者人数、邮件入列、邮件出列的数量
则,Mq消费者通过Mq获取信息成功,Mq队列内的信息数量实现了动态平衡。
ActiveMq --消费者同步阻塞/异步非阻塞
//同步阻塞 接收消息
TextMessage receive = (TextMessage) consumer.receive();
//异步非阻塞
consumer.setMessageListener(new MessageListener() {
@SneakyThrows
public void onMessage(Message message) {
if(null != message && message instanceof TextMessage){
TextMessage textMessage=(TextMessage) message;
System.out.println("获取监听的消费者信息:——————"+textMessage.getText());
}
}
});