• jms


                      activeMQ入门案例

    叨叨一波,很久没写博客了,最近比较慢,时间抽不出来,这个借口说的很尴尬...我知道作为一名合格的码农就必须养成每天一博客的习惯.希望友友们别像我这样懒,闲话不多时进入今天的主题,理论就不多说了,直接上案例.

     

    1.activemq 是Apache旗下的一个开源的中间件,所以我们先去官网下载解压包,官网地址 :  http://activemq.apache.org/activemq-5153-release.html

    备注:linux 下载框中的解压包,window就下载箭头指向的.

    2.下载后解压,解压后进入到bin目录下,可以看到两个文件夹(win32/win64)是32进32,否则相反

    3.进入到对应目录能看到3个后缀为.bat 的可以执行文件,第一个cmd 方式运行,红框中就是activemq启动的端口号,不能关闭窗口,不然服务结束,接着我们测试打开浏览器输入192.168.2.70:8161

    3.第二种方式点击第二个.bat 文件则是在本机服务里面启动,就跟mysql服务启动一直,就不再上图.

    4.浏览器打开的页面如下,如果没有这个页面证明avtivemq启动错误

    5.点击红框会弹出登录信息,初始化账号密码默认为admin   admin 进入后就能看到管理页面不在上图

    6.  接下来展示下activemq的消息队列案例,工具使用idea 创建maven 项目

    依赖包添加好,项目结构也在上面.

    7.连接activemq 服务的链接,我是通过CreateQueueConnectionUtil工具类封装好减少代码的溶于,这是开发人员必备的,接下来上代码:

    package com.tjl.Util;

    import org.apache.activemq.ActiveMQConnectionFactory;
    import org.apache.activemq.ActiveMQQueueSession;

    import javax.jms.*;

    /**
    * Created by tangjialei on 2018/4/13.
    * 创建activeme连接
    */
    public class CreateQueueConnectionUtil {
    private static final String url="tcp://192.168.2.70:61616";//activemq默认端口
    private static final String queueName = "queue-test";//提供者名字
    private static ConnectionFactory connectionFactory = null;//工厂
    private static Connection connection = null;//链接
    private static Destination destination = null;//目标
    private static Session session = null;//会话

    public CreateQueueConnectionUtil() {

    }
    public static Destination getdestination(){
    try{
    //1.创建ConnectionFactory工厂
    connectionFactory = new ActiveMQConnectionFactory(url);
    //2.创建连接
    connection = connectionFactory.createConnection();
    //3.启动链接
    connection.start();
    //4.创建会话
    session =CreateQueueConnectionUtil.getSession();
    //5.创建目标
    destination = session.createQueue(queueName);
    }catch (Exception e){
    e.printStackTrace();
    }finally {
    if(null == destination){
    System.out.println("创建destination失败!");
    }else{
    System.out.println("创建destination成功!");
    }
    }
    return destination;
    }

    public static Session getSession(){
    if(session == null){
    try{
    return connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//应答模式
    }catch (JMSException e){
    e.printStackTrace();
    }
    }
    return session;
    }

    public static void onClose(){
    if(null !=connection){
    try{
    connection.close();
    }catch (JMSException e){
    e.printStackTrace();
    }
    }
    }
    }

    8.我们来看看提供者代码
    package com.tjl.jms.queue;

    import com.tjl.Util.CreateQueueConnectionUtil;
    import org.apache.activemq.ActiveMQConnectionFactory;

    import javax.jms.*;

    /**
    * Created by tangjialei on 2018/4/13.
    * 主题模式,此类为消息的提供者
    */
    public class AppProducer {
    private static Session session=null;
    public static void main(String[] args) throws JMSException {
        //5.创建一个目标
            Destination destination = CreateQueueConnectionUtil.getdestination();
    //获取session
    session = CreateQueueConnectionUtil.getSession();
    //创建一个生产者
    MessageProducer producer = session.createProducer(destination);
    for (int i = 0; i <10 ; i++) {
    //7.通过会话创建消息
    TextMessage textMessage = session.createTextMessage("hello activrme"+i);
    textMessage.setText("我是你第"+i+"个爸爸");
    //8.发送消息
    producer.send(textMessage);//生产者向服务生产消息
    System.out.println("发送消息" + textMessage.getText());
    }

    //9.关闭连接
    CreateQueueConnectionUtil.onClose();
    }
    }

     9.接着上消费者代码:

    package com.tjl.jms.queue;

    import com.tjl.Util.CreateQueueConnectionUtil;

    import javax.jms.*;

    /**
    * Created by tangjialei on 2018/4/13.
    * 主题模式:消费者(消费activemq)
    */
    public class AppConsumer {
    private static Session session;
    public static void main(String[] args) throws JMSException {
    //创建去哪个服务消费目标
    Destination destination = CreateQueueConnectionUtil.getdestination();
    //获取session
    session = CreateQueueConnectionUtil.getSession();
    //创建一个消费者MessageConsumer
    MessageConsumer consumer = session.createConsumer(destination);
    //创建一个监听器
    consumer.setMessageListener(new MessageListener() {//MessageListener消息监听
    public void onMessage(Message message) {//异步回调函数
    TextMessage textMessage = (TextMessage) message;
    try{
    System.out.println("我是消费者我接收到消息" + textMessage.getText());
    }catch (JMSException e){
    e.printStackTrace();
    }
    }
    });
    }
    }

    代码上完我们开始看运行效果
    提供者运行图

      

    接着打开我们前面的192.168.70:8161 可以看到刚发送的消息信息

      接着运行消费者去消费者10条消息

    看到控制台完美输出消费者消费信息,这时候你在到8161端口查看,消息就被消费了,到此一个简单的消息队列案例就完成了,很简单大神勿喷~~~~~~~~~~~
    
    

     

  • 相关阅读:
    正则表达式
    request库解析
    urllib库解析
    爬虫入门基本原理
    图的遍历dfs和bfs
    KMP算法
    Linux操作系统实验-线程同步
    Leetcode 183场周赛
    并查集--Disjoint Set
    C#杂乱知识汇总
  • 原文地址:https://www.cnblogs.com/tjlboke/p/8822419.html
Copyright © 2020-2023  润新知