初步了解 ActiveMQ

Apache ActiveMQ is a message broker written in Java together with a full JMS client. However Apache ActiveMQ is designed to communicate over a number of protocols such asStomp and OpenWire together with supporting a number of different language specific clients.

 

1)从(http://activemq.apache.org/)下载apache-activemq-5.4.2-bin.zip
2)解压apache-activemq-5.4.2-bin.zip到E:\note\ActiveMQ\
3)启动E:\note\ActiveMQ\apache-activemq-5.4.2-bin\bin\activemq.bat
4) 查看E:\note\ActiveMQ\apache-activemq-5.4.2-bin\conf\activemq.xml
        <transportConnectors>
            <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
        </transportConnectors>
5)启动好ActiveMQ之后,可以通过http://localhost:8161/admin来在浏览器里访问查看和管理消息
6)发送消息
import java.util.Date;

import javax.jms.Connection;
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 Send {
 public static void main(String[] args) throws Exception {
  // Create a ConnectionFactory
  ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
    "tcp://0.0.0.0:61616");
  // connectionFactory.setUseAsyncSend(true);
  // Create a Connection
  Connection connection = connectionFactory.createConnection();
  connection.start();
  // Create a Session
  Session session = connection.createSession(Boolean.FALSE,
    Session.AUTO_ACKNOWLEDGE);
  Destination destination = session.createQueue("t1,t2,t3");
  // Create a MessageProducer from the Session to the Topic or Queue
  MessageProducer producer = session.createProducer(destination);
  // producer.set
  producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
  // Create a messages
  @SuppressWarnings("deprecation")
  String text = "Hello world! From: " + new Date().toLocaleString();
  TextMessage message = session.createTextMessage(text);
  producer.send(message);
  // Clean up
  producer.close();
  session.close();
  connection.close();
 }

}

启动结果:

log4j:WARN No appenders could be found for logger (org.apache.activemq.transport.WireFormatNegotiator).
log4j:WARN No appenders could be found for logger (org.apache.activemq.transport.tcp.TcpTransport).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN Please initialize the log4j system properly.

7)接收消息
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 Receive1 {
  public static void main(String[] args)throws Exception {
         ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://0.0.0.0:61616");
         Connection connection = connectionFactory.createConnection();
         connection.start();
         Session session = connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);
         Destination destination = session.createQueue("t1,t2,t3");
         MessageConsumer consumer = session.createConsumer(destination);
             while (true) {
                 TextMessage message = (TextMessage) consumer.receive(1000);
                 if (null != message) {
                     System.out.println("1 收到消息" + message.getText());
                     //break;
                 }
             }
//         consumer.close();
//         session.close();
//         connection.close();
     }

}

 

启动结果:
log4j:WARN No appenders could be found for logger (org.apache.activemq.transport.WireFormatNegotiator).
log4j:WARN No appenders could be found for logger (org.apache.activemq.transport.tcp.TcpTransport).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN Please initialize the log4j system properly.
1 收到消息Hello world! From: 2012-7-12 23:47:06
1 收到消息Hello world! From: 2012-7-12 23:47:06
1 收到消息Hello world! From: 2012-7-12 23:47:06


非常感谢 http://topic.csdn.net/u/20120708/22/2e29edf2-2473-416f-8e82-cc9dfdfb324c.html 这个贴给予的启发,其中有个前辈的话非常有指向性,贴在下面,空时多看看。

应用场景:

比如你系统中某些地方需要发送短信或者邮件,一般来说我们会写一个 API 供为调用,但是如果有 N 个系统都有这种需求,那这个 API 我们可以需要复制几份分别放到不同的工程中供为调用。

如果采用 JMS 的话,只需要将需要发送的数据扔到 JMS 队列中去,由专门的消息发送服务器从 JMS 队列中取出数据统一发送。

从上来看,采用 JMS 带来的好处有:集中式管理、短信和邮件是异步发送的,应用端只需要把数据扔给队列,并不会阻塞到邮件或者短信发送完毕,因此应用可以承载更高的请求量。

JMS 中使用最多的是 point-to-point 也就是队列。Java API 中有 BlockingQueue 可以很方便地实现生产者-消费者模式,生产者-消费者带来的好处我也不说了。但是 BlockingQueue 只能在一个 Java 进程中使用,若想使用跨应用、跨服务器分布式的生产者-消费者,那目前 J2EE 中只有 JMS 这个规范。

对于分布式应用系统的架构和设计,采用 JMS 进行异步的消息处理是可以优先考虑的,因为 JMS 的使用非常廉价,有现成的 API,现成的开源服务器。

作为一位应用架构设计人员,应从可扩展、可维护的角度去考虑应用的架构,而不是所有的东西都揉在一个工程中,如果是这样的话,今后性能产生问题的时候再进行拆分需要花费大量的人力和物力。这在现今的互联网及企业应用中有很多的例子。

如果你想去应聘架构师,而且是涉及分布式应用方面的话,可以去看看 POSA 这套书,推荐 2、3、4 卷,第 1 和第 5 卷基本上都是概念性的东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值