ActiveMq的使用(一)快速入門

  1. ActiveMQ 的作用分析
2.ActiveMQ工作原理(JSM java message server)
  1.  解決服務之間的耦合
  2.  使用消息隊列,增加系統併發處理量
3.ActiveMQ 應用場景分析
    1、 用戶註冊,重點用戶信息數據庫保存,發短信、發郵件,增加業務處理複雜度,這時候使用 MQ, 將發短信、發郵箱,通知 MQ,由另外服務平臺完成
2、 搜索平臺、緩存平臺
  • 查詢數據,建立緩存、索引 ,不從數據庫查詢,從緩存或者索引庫查詢
  • 當增加、修改、刪除數據時,發送消息給 MQ, 緩存平臺、索引平臺 從 MQ 獲取到這個信息,更新緩存或者索引


ActiveMQ的使用

  • 第一步:進入 apache-activemq-5.14.0\bin\win64 目錄 啓動 activemq.bat 文件
  • 第二步:訪問:http://localhost:8161/ 用戶名和密碼 都是 admin


ActiveMQ 使用的是標準生產者和消費者模型
  • 有兩種數據結構 QueueTopic
    • 1、 Queue 隊列 ,生產者生產了一個消息,只能由一個消費者進行消費
    • 2、 Topic 話題,生產者生產了一個消息,可以由多個消費者進行消費

使用Java程序操作ActiveMQ

  • 第一步:導入activeMQ的座標
  • 第二步:(一般不用自己寫)編寫MQ消息生產者
@Test
     public void testProducerMQ() throws Exception {
           // 連接工程-依賴jms java中的消息接口(默認的用戶名密碼,路徑)
           // 路徑寫法是 tcp://host:port
           ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
           // 獲取一個鏈接
           Connection connection = connectionFactory.createConnection();
           // 建立會話
           Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); 
           //其中第一個參數是(是否開啓事務,開啓後只有在commit的時候才發),
            第二個參數代表自動簽收,(當commit的時候就簽收)
           // 創建隊列,話題對象
           Queue queue = session.createQueue("HelloWorld");
           // 創建消息生產者or 消費者
           MessageProducer producer = session.createProducer(queue);
           // 發送消息
           for (int i = 0; i < 10; i++) {
                producer.send(session.createTextMessage("你好,activeMQ"));
           }
           // 提交消息
           session.commit();
     }

默認 tcp 連接 activeMQ 端口 61616 !!!

@Test
           public void testConsume() throws Exception{
                // 連接工程-依賴jms java中的消息接口(默認的用戶名密碼,路徑)
                // 路徑寫法是 tcp://host:port
                ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
                // 獲取一個鏈接
                Connection connection = connectionFactory.createConnection();
                //開啓鏈接\
                connection.start();
                // 建立會話
                Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
                // 創建隊列,話題對象
                Queue queue = session.createQueue("HelloWorld");
                // 創建消息生產者or 消費者
                MessageConsumer consumer = session.createConsumer(queue);
                
                //利用監聽器接收消息
                consumer.setMessageListener(new MessageListener() {
                     
                     public void onMessage(Message message) {
                           TextMessage message2 = (TextMessage) message;
                           try {
                                System.out.println(message2.getText());
                           } catch (JMSException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                           }
                           
                     }
                });


Spring 結合 ActiveMQ編程

1 在activeMQ_spring導入相關jar包
下圖爲activemq依賴包
下圖爲spring 結合activemq的依賴包
2 如果是消息生廠商,則需要配置application-mq.xml


另外配置需要的生產者
    @Autowired
    @Qualifier("jmsQueueTemplate")
    private JmsTemplate jmsTemplate;

調用生產者的方法    
//調用mq服務,發送一條消息
           jmsTemplate.send("bos_sms",new MessageCreator() {
                
                @Override
                public Message createMessage(Session session) throws JMSException {
                     MapMessage mapMessage = session.createMapMessage();
                     mapMessage.setString("telephone", order.getCourier().getTelephone());
                     mapMessage.setString("msg", msg);
                     
                     return mapMessage;
                }
           });


3,消費者,直接搭建一個服務器工程

創建消費者的類
@Service
public class SmsConsumer implements MessageListener{
     @Override
     public void onMessage(Message message) {
           
           //調用smsutils來發送短信
           // String result = SmsUtils.sendSmsByHTTP(model.getTelephone(), msg);
           MapMessage mapMessage = (MapMessage) message;
           try {
                String telephone = mapMessage.getString("telephone");
                String msg = mapMessage.getString("msg");
                System.out.println("發送短信內容:"+msg+"接收手機號:"+telephone);
           } catch (JMSException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
           }
           String result = "000123";
           if (result.startsWith("000")) {
                //發送成功
                System.out.println("發送成功");
           } else {
                throw new RuntimeException("短信發送失敗,信息碼:" + result);
           }
           
           
     }
}
























































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章