一、ActiveMQ简介
ActiveMQ是Apache出品、最流行的,能力强劲的开源的消息项目。
二、ActiveMQ的使用
在学习阶段,我们先使用windows版本,解压压缩包后,目录如下:
打开bin目录,运行批处理文件
最后运行出现这个的时候就代表启动成功
启动成功后,可以登录控制台,用户名和密码默认都是admin
这个端口号我们是可以修改的
也就是下面的这部分:
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<!-- the default port number for the web console -->
<property name="host" value="0.0.0.0"/>
<property name="port" value="8161"/>
</bean>
而账号修改是在这里修改
三、ActiveMQ的Hello world案例
新建一个java-project项目,导入jar包:
上面新建的sender.java类是消息发送者,内容如下:
package test.mq.helloworld;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Sender {
public static void main(String[] agrs) throws Exception{
//第一步:建立ConnectionFactory工厂对象
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,
ActiveMQConnectionFactory.DEFAULT_PASSWORD,"tcp://localhost:61616");
//第二步:通过ConnectionFactory工厂对象我们创建一个Connection对象
Connection connection = connectionFactory.createConnection();
connection.start();
//第三步:通过connection对象创建Session会话,第一个参数为是否开启事务,第二个参数为签收模式,一般设置为自动签收
Session session = connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);
//第四步:通过Session创建Destination对象,queue1可看作是放入队列的消息名称,可以自定义
Destination desiDestination = session.createQueue("queue1");
//第五步:通过session创建消息的生产者或消费者,下面是创建生产者
MessageProducer messageProducer = session.createProducer(desiDestination);
//第六步:使用MessageProducer的set方法为其设置持久化特性和非持久化特性,后面再详细介绍
messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);//这里先设置为非持久化
//第七步:通过JMS规范的TextMessage形式创建数据(通过session对象),并用MessageProducer的send方法发送数据
for(int i =0; i<5;i++){
TextMessage textMessage = session.createTextMessage("这是消息内容,id为"+i);
messageProducer.send(textMessage);
}
if(connection!=null){
connection.close();
}
}
}
上面的tcp://localhost:61616是可以配置的
运行java代码后,这时候到控制台就会发现queue队列里面有5个消息
而消息的消费者则跟生产者有点类型,下面是消息消费者的简单demo
package test.mq.helloworld;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Receiver {
public static void main(String[] agrs) throws Exception{
//第一步:建立ConnectionFactory工厂对象
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,
ActiveMQConnectionFactory.DEFAULT_PASSWORD,"tcp://localhost:61616");
//第二步:通过ConnectionFactory工厂对象我们创建一个Connection对象
Connection connection = connectionFactory.createConnection();
connection.start();
//第三步:通过connection对象创建Session会话,第一个参数为是否开启事务,第二个参数为签收模式,一般设置为自动签收
Session session = connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);
//第四步:通过Session创建Destination对象,queue1可看作是放入队列的消息名称,可以自定义
Destination desiDestination = session.createQueue("queue1");
//第五步:通过session创建消息的生产者或消费者,下面是创建消费者
MessageConsumer messageConsumer = session.createConsumer(desiDestination);
while(true){
TextMessage msg = (TextMessage) messageConsumer.receive();
if(msg==null){
break;
}
System.out.println("收到的内容为"+msg);
}
if(connection!=null){
connection.close();
}
}
}
这时候每当生产者发送消息,消费者都会及时地接收到。