• ActiveMQ(二) 转


    package pfs.y2017.m11.mq.activemq.demo02;
    
    import java.util.concurrent.atomic.AtomicInteger;
    
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.JMSException;
    import javax.jms.MessageConsumer;
    import javax.jms.Queue;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    
    import org.apache.activemq.ActiveMQConnection;
    import org.apache.activemq.ActiveMQConnectionFactory;
    
    public class Comsumer {
    
        private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    
        private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    
        private static final String BROKEN_URL = ActiveMQConnection.DEFAULT_BROKER_URL;
    
        ConnectionFactory connectionFactory;
    
        Connection connection;
    
        Session session;
    
        ThreadLocal<MessageConsumer> threadLocal = new ThreadLocal<>();
        AtomicInteger count = new AtomicInteger();
    
        public void init(){
            try {
                connectionFactory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKEN_URL);
                connection  = connectionFactory.createConnection();
                connection.start();
                session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    
    
        public void getMessage(String disname){
            try {
                Queue queue = session.createQueue(disname);
                MessageConsumer consumer = null;
    
                if(threadLocal.get()!=null){
                    consumer = threadLocal.get();
                }else{
                    consumer = session.createConsumer(queue);
                    threadLocal.set(consumer);
                }
                while(true){
                    Thread.sleep(1000);
                    TextMessage msg = (TextMessage) consumer.receive();
                    if(msg!=null) {
                        msg.acknowledge();
                        System.out.println(Thread.currentThread().getName()+": Consumer:我是消费者,我正在消费Msg"+msg.getText()+"--->"+count.getAndIncrement());
                    }else {
                        break;
                    }
                }
            } catch (JMSException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    

      

    package pfs.y2017.m11.mq.activemq.demo02;
    
    import java.util.concurrent.atomic.AtomicInteger;
    
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.JMSException;
    import javax.jms.MessageProducer;
    import javax.jms.Queue;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    
    import org.apache.activemq.ActiveMQConnection;
    import org.apache.activemq.ActiveMQConnectionFactory;
    
    public class Producter {
    
    	// ActiveMq 的默认用户名
    	private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    	// ActiveMq 的默认登录密码
    	private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    	// ActiveMQ 的链接地址
    	private static final String BROKEN_URL = ActiveMQConnection.DEFAULT_BROKER_URL;
    
    	AtomicInteger count = new AtomicInteger(0);
    	// 链接工厂
    	ConnectionFactory connectionFactory;
    	// 链接对象
    	Connection connection;
    	// 事务管理
    	Session session;
    	ThreadLocal<MessageProducer> threadLocal = new ThreadLocal<>();
    
    	public void init() {
    		try {
    			// 创建一个链接工厂
    			connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKEN_URL);
    			// 从工厂中创建一个链接
    			connection = connectionFactory.createConnection();
    			// 开启链接
    			connection.start();
    			// 创建一个事务(这里通过参数可以设置事务的级别)
    			session = connection.createSession(true, Session.SESSION_TRANSACTED);
    		} catch (JMSException e) {
    			e.printStackTrace();
    		}
    	}
    
    	public void sendMessage(String disname) {
    		try {
    			// 创建一个消息队列
    			Queue queue = session.createQueue(disname);
    			// 消息生产者
    			MessageProducer messageProducer = null;
    			if (threadLocal.get() != null) {
    				messageProducer = threadLocal.get();
    			} else {
    				messageProducer = session.createProducer(queue);
    				threadLocal.set(messageProducer);
    			}
    			while (true) {
    				Thread.sleep(1000);
    				int num = count.getAndIncrement();
    				// 创建一条消息
    				TextMessage msg = session.createTextMessage(
    						Thread.currentThread().getName() + "productor:我是大帅哥,我现在正在生产东西!,count:" + num);
    				System.out.println(Thread.currentThread().getName() + "productor:我是大帅哥,我现在正在生产东西!,count:" + num);
    				// 发送消息
    				messageProducer.send(msg);
    				// 提交事务
    				session.commit();
    			}
    		} catch (JMSException e) {
    			e.printStackTrace();
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    	}
    }
    

      

    package pfs.y2017.m11.mq.activemq.demo02;
    
    public class TestConsumer {
        public static void main(String[] args){
            Comsumer comsumer = new Comsumer();
            comsumer.init();
            TestConsumer testConsumer = new TestConsumer();
            new Thread(testConsumer.new ConsumerMq(comsumer)).start();
            new Thread(testConsumer.new ConsumerMq(comsumer)).start();
            new Thread(testConsumer.new ConsumerMq(comsumer)).start();
            new Thread(testConsumer.new ConsumerMq(comsumer)).start();
        }
    
        private class ConsumerMq implements Runnable{
            Comsumer comsumer;
            public ConsumerMq(Comsumer comsumer){
                this.comsumer = comsumer;
            }
    
            @Override
            public void run() {
                while(true){
                    try {
                        comsumer.getMessage("Jaycekon-MQ2");
    //                    Thread.sleep(10000);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

      

    package pfs.y2017.m11.mq.activemq.demo02;
    
    public class TestMq {
        public static void main(String[] args){
            Producter producter = new Producter();
            producter.init();
            TestMq testMq = new TestMq();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //Thread 1
            new Thread(testMq.new ProductorMq(producter)).start();
            //Thread 2
            new Thread(testMq.new ProductorMq(producter)).start();
            //Thread 3
            new Thread(testMq.new ProductorMq(producter)).start();
            //Thread 4
            new Thread(testMq.new ProductorMq(producter)).start();
            //Thread 5
            new Thread(testMq.new ProductorMq(producter)).start();
        }
    
        private class ProductorMq implements Runnable{
            Producter producter;
            public ProductorMq(Producter producter){
                this.producter = producter;
            }
    
            @Override
            public void run() {
                while(true){
                    try {
                        producter.sendMessage("Jaycekon-MQ2");
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

      

  • 相关阅读:
    希尔排序算法
    java面向对象的栈 队列 优先级队列的比较
    java不用任何已有方法完全自写的去重法
    java面向对象的冒泡排序,选择排序和插入排序的比较
    java面向对象的有序数组和无序数组的比较
    Truncated incorrect DOUBLE value:
    laradock 安装多php版本
    graph-composer, 面向 composer.json的依赖图可视化( PHP + Composer )
    php基础
    php通过curl调用webservice
  • 原文地址:https://www.cnblogs.com/Damon-Luo/p/7804230.html
Copyright © 2020-2023  润新知