最近在window和linux分别都搭建了ActiveMQ,搭建的过程很简单,直接解压启动即可,过程略。消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
接下来通过java代码连上MQ并且创建生产者和消费者,因为我是在maven项目中写的代码,所以,需要在pom.xml中引入active-all即可;如下图所示:
创建生产者的步骤:
①、创建connectFactory
②、创建connection
③、启动连接
④、创建会话
⑤、创建一个目标
⑥、创建消息
⑦、发布消息
⑧、关闭连接
以下是生产者的详细代码:
public class AppProducer {
private static final String url="tcp://localhost:61616";//这是内网地址 private static final String queueName="queue-test"; @Test public void createMessage() throws JMSException{ //1、创建connectFactory ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("admin","admin",url);//采用厂商提供的连接方式连接 //2、創建connection Connection connect=connectionFactory.createConnection(); //3、启动连接 connect.start(); //4、创建会话 Session session=connect.createSession(false, Session.AUTO_ACKNOWLEDGE); //5、创建一个目标 Destination destination=session.createQueue(queueName); //创建一个生产者 MessageProducer producer=session.createProducer(destination); for(int i=0;i<100;i++){ //7、创建消息 TextMessage textMessage=session.createTextMessage("我的消息队列测试"+i); //8、发布消息 producer.send(textMessage); System.out.println("发送消息"+textMessage.getText()); } //9、关闭连接 session.close(); connect.close(); } } |
运行的效果如下图所示:
创建消费者步骤:
①、创建connectFactory
②、创建connection
③、启动连接
④、创建会话
⑤、创建一个目标
⑥、创建一个消费者
⑦、创建一个监听器
以下是消费者详细代码:
public class AppConsumer { private static final String url="tcp://localhost:61616";//这是内网地址 private static final String queueName="queue-test"; @Test public static void getMessageByMQ() throws JMSException{ //1、创建connectFactory ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("admin","admin",url); //2、創建connection Connection connect=connectionFactory.createConnection(); //3、启动连接 connect.start(); //4、创建会话 Session session=connect.createSession(false, Session.AUTO_ACKNOWLEDGE); //5、创建一个目标 Destination destination=session.createQueue(queueName); //6、创建一个消费者 MessageConsumer consumer=session.createConsumer(destination); //7、创建一个监听器 consumer.setMessageListener(new MessageListener() { @Override public void onMessage(Message message) { TextMessage textMessage=(TextMessage)message; try { System.out.println("接收消息="+textMessage.getText()); } catch (JMSException e) { e.printStackTrace(); } } }); } } |
运行结果是:
生产者生产出来的消息一旦被消费者消费后,在activemq界面的Number Of Pending Messages 会被消费。一旦被消费完,该项会被清零。
第一次玩消息队列,写了以上的笔记,如果写得有错误或者改进的地方,请多多指教,谢谢!