你可以使用bin\activemq.bat(activemq) 启动
启动完成以后,可以访问
http://localhost:8161/admin/
http://localhost:8161/demo/
1. 这个仅仅是最基础的ActiveMQ的配置,很多地方都没有配置因此不要直接使用这个配置用于生产系统
三、消息传递的两种模型
- 3.1、PTP模型
PTP模型是基于队列的,生产者发送消息到队列,消费者从队列接收消息,队列的存在使消息的异步传输成为可能。JMS提供工具管理队列的创建,删除。PTP模型定义了客户端如何向队列发送消息,从队列接受消息,浏览队列中的消息。
- 3.2、 JMS PUB/SUB模型定义了如何向一个内容节点发布和订阅消息,这些节点被称作主题。主题可以被认为是消息的传输中介,发布者发布消息到主题,订阅者从主题订阅消息。主题使得消息订阅者和消息发布者保持相互独立,不需要接触即可保证消息的传送。
四、开发JMS应用步骤
- 获取ConnectionFactory对象;
- 用ConnectionFactory对象创建Connection对象;
- 用Connection对象创建一个或者多个JMS Session;
- 获取目标队列或者主题对象,即Destination对象;
- 用Session和Destination创建MessageProducer和MessageConsumer;
- 通知Connection开始传送消息;
- 4.1、 ConnectionFactory
要初始化JMS,需要用到链接工厂。客户端通过创建连接工厂简历到ActiveMQ的连接,一个连接工厂封装了一组连接配置参数,这组参数在配置ActiveMQ时已经定义,例如brokerURL参数,此参数传入的是ActiveMQ服务的地址和端口,支持openwire协议的默认连接为tcp://ip:61616,支持stomp协议的默认连接为tcp://ip:61613。支持并发操作。
如:ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://localhost:61616");
- 4.2、 Connection
Connection是JMS定义的一个接口。ConnectionFactory负责返回可以与底层消息传输系统信息通讯的Connection的实现。通常客户端只使用单一的连接。Connection还应该是客户端身份验证的地方。当一个Connection被创建时,传输默认是关闭的,要使用start方法开启,一个connection可以建立一个或者多个session。程序执行完成后,必须关闭之前创建的Connection。
如:Connection conn = cf.createConnection();
- 4.3、 Session
可以从Connection创建一个或者多个Session,Session是一个发送或者接收消息的线程。可以使用Session创建MessageProducer,MessageConsumer和Message。Session可以被事务华,也可以不被事务化,可以通过适当的创建方法对此进行设置。
如:Session session=conn.createSession(false,Session.AUTO_ACKNOWLEDGE);
第一个参数为使用事务的标识,第二个 是签收模式
- 4.4、Destination
Destination是客户端用来指定生产消息目标和消费 消息来源的对象。在PTP模式中,Destination为Queue即队列;在PUB/SUB模式中,Destination为Topic即主题。程序中可以使用多个Queue和Topic。
如:Destination destination = new ActiveMQQueue("testQueue");
- 4.5、MessageProducer
MessageProducer是由Session创建的对象,用来向Destination发送消息。
如:MessageProducer producer = session.createProducer(destination);
发送消息:
producer.send(message);
- 4.6、 MessageConsumer
MessageConsumer是由Session创建的对象,用来从Destination接受消息。
如:MessageConsumer consumer = session.createConsumer(destination);
接收消息:
consumer.receive();
安全配置
1、控制台安全配置,打开conf/jetty.xml文件,找到
<bean id="securityConstraint" class="org.eclipse.jetty.http.security.Constraint">
<property name="name" value="BASIC" />
<property name="roles" value="admin" />
<property name="authenticate" value="false" />
</bean>
将“false”改为“true”即可。用户名和密码存放在conf/jetty-realm.properties文件中。
2、生产者和消费者连接MQ需要密码
打开conf/activemq.xml文件,在<broker>标签里的<systemUsage>标签前加入:
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
</plugins>
注意必须在<systemUsage>标签前,否则启动ActiveMQ会报错。
用户名和密码存放在conf/credentials.properties文件中
activemq控制台英文注释
Number Of Consumers 消费者
Number Of Pending Messages 等待消费的消息
Messages Enqueued 进入队列的消息
Messages Dequeued 出了队列的消息
Operations 操作
Purge 净化
当有一个消息进入这个队列时,等待消费的消息是1,进入队列的消息是1。当消息消费后,等待消费的消息是0,进入队列的消息是1,出队列的消息是1.在来一条消息时,等待消费的消息是1,进入队列的消息就是2.以此类推,进入队列的消息和出队列的消息是池子,等待消费的消息是水流。