activeMQ主要实现: 流量削峰 异步 系统解耦
启动
下载activeMQ到LINUX中
进入activeMQ的bin目录中
普通启动/关闭: ./activemq start/stop
端口号: 61616
带日志启动: ./activemq start > 日志地址
查看是否启动
ps -ef | grep avtivemq | grep -v grep
netstat -anp | grep 61616
window访问http://linuxIP:8161/
控制台访问
61616是后台端口号
8161前台端口
默认用户名/密码: admin
访问前,先保证win和linux能够ping通
并且关闭防火墙: systemclt stop firewall.service或者
开放端口:firewall-cmd --add-port=8161/tcp --permanent
查看已开放的端口:firewall-cmd --list-ports
基本概念
队列queue
我们发送消息到目的地(Desitinate),只能被一个消费者消费一次
主题topic
我们发送消息到目的地(Desitinate),可以被多个在监听的消费者消费
提供者produce
消息的发送方
消费者consumer
消息的接收处理方
实例
消息生产者
public class JmsProduce {
public static final String ACTIVEMQ_URL = "tcp://linuxIP地址:61616";
public static final String QUEUE_NAME = "queue";
public static void main(String[] args) throws JMSException {
//1.创建连接工厂,按照给定的url地址,采用默认的用户名和密码
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
//2.获得connection,并启动访问
Connection connection = activeMQConnectionFactory.createConnection();
connection.start();
//3.创建session p1: 事务; p2: 签收
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//4.创建目的地(队列queue or 主题topic)
Queue queue = session.createQueue(QUEUE_NAME);
//5.创建消息的生产者
MessageProducer messageProducer = session.createProducer(queue);
//6.使用messageProducer生产信息发送到MQ的队列里
for (int i = 0; i < 3; i++) {
//7.创建信息
TextMessage textMessage = session.createTextMessage("msg---" + i);
//8.通过messageProducer发送mq
messageProducer.send(textMessage);
}
//9.关闭资源
messageProducer.close();
session.close();
connection.close();
System.out.println("消息发送成功");
}
}
消息消费者
public class JmsConsumer {
public static final String ACTIVEMQ_URL = "tcp://linuxIP地址:61616";
public static final String QUEUE_NAME = "queue";
public static void main(String[] args) throws JMSException, IOException {
//1.创建连接工厂,按照给定的url地址,采用默认的用户名和密码
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
//2.获得connection,并启动访问
Connection connection = activeMQConnectionFactory.createConnection();
connection.start();
//3.创建session p1: 事务; p2: 签收
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//4.创建目的地(队列queue or 主题topic)
Queue queue = session.createQueue(QUEUE_NAME);
//创建消费者
MessageConsumer messageConsumer = session.createConsumer(queue);
//通过监听的方法来接收消息
messageConsumer.setMessageListener(new MessageListener() {
public void onMessage(Message message) {
if (message != null && 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();
}
}