JMS服务器ActiveMQ

JMS服务器ActiveMQ

一、概述

    1.1 简述

       Apache  ActiveMQ是根据JMS协议编写,是最流行和强大的开源apache的消息中间件。它有速度快,支持多个语言客服端和多协议,完全支持JMS1.1和JMS1.4的协议。Apache ActiveMQ的使用的Apache2协议,下载后通过指南能很快使用。

    1.2 下载

        地址:Apache ActiveMQ

    1.3 运行

        a)下载解压:

JMS服务器ActiveMQ_第1张图片

    b)运行:

bin\win64\activemq.bat start

JMS服务器ActiveMQ_第2张图片

    c)访问

JMS服务器ActiveMQ_第3张图片

    (ps:默认的账户/密码:admin/admin)

二、JMS操作

    2.1 结构图

JMS服务器ActiveMQ_第4张图片

    2.2 依赖类

       a) 连接

                javax.jms.ConnectionFactory:工厂类,创建连接。

                javax.jms.Connection:连接服务器

                javax.jms.Session:每一个连接一个操作

        b)目的

                javax.jms.Queue:一对一链表

                javax.jms.Topic:一对多主题

        b)消息

                javax.jms.Message:消息引用,是java规范

                javax.jms.TextMessage: text消息

                javax.jms.MapMessage:map消息

                javax.jms.BytesMessage:byte消息

                javax.jms.StreamMessage:stream消息

        c)发送者

                javax.jms.MessageProducer:消息发送者

        d)接受者

                javax.jms.MessageConsumer:消息接受者

                javax.jms.MessageListener:接受者监听处理

    2.3 发送/接受

/**
	 * @see Apache ActiveMQ的测试
	 * @author ssHss
	 * @throws Exception
	 *
	 */

	@Test
	public void send() throws Exception {
		ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");// 获取工程类
		Connection connection = factory.createConnection();// 获取连接
		// 连接
		connection.start();
		// 设置session
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

		// 目的地:
		// Queue Queue = new ActiveMQQueue("testQueue");// 队列(一对一)
		Topic topic = new ActiveMQTopic("testTopic");// 话题(一对多)

		// 消息
		TextMessage textMassage = session.createTextMessage("hello JMS");// text消息:可以传字符串
		// textMassage.wait(10000);// 延迟

		BytesMessage bytesMessage = session.createBytesMessage();// 传byte
		bytesMessage.writeByte((byte) 'a');

		MapMessage mapMessage = session.createMapMessage();// map类型
		mapMessage.setBoolean("flage", false);

		ObjectMessage objectMessage = session.createObjectMessage(); // 传送object类型
		objectMessage.setObject(new String("hello JMS"));

		StreamMessage streamMessage = session.createStreamMessage(); // stream类型
		streamMessage.writeString("Hello JMS");

		// 发送者
		MessageProducer producer = session.createProducer(topic);
		// 发送
		producer.send(textMassage);
		producer.close();
		session.close();
	}

	@Test
	public void comsumer() throws Exception {
		ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");// 获取工程类
		Connection connection = factory.createConnection();// 获取连接
		// 连接
		connection.start();
		// 设置session
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

		// 目的地:
		Queue queue = new ActiveMQQueue("testQueue");// 队列(一对一)
		// Topic topic = new ActiveMQTopic("testTopic");// 话题(一对多)

		// 接收者
		MessageConsumer consumer = session.createConsumer(queue);
		// 监听
		consumer.setMessageListener(new MessageListener() {
			public void onMessage(Message message) {
				if (message instanceof TextMessage) {
					TextMessage textMessage = (TextMessage) message;// 这里需要将消息转换为我们需要的类型
					try {
						System.out.println("consumer Message:" + textMessage.getText());
					} catch (JMSException e) {
						e.printStackTrace();
					}
				}
			}
		});
		consumer.close();
	}

	@Test
	public void comsumers() throws Exception {
		ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");// 获取工程类
		Connection connection = factory.createConnection();// 获取连接
		// 连接
		connection.start();
		// 设置session
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

		// 目的地:
		// Queue queue = new ActiveMQQueue("testQueue");// 队列(一对一)
		Topic topic = new ActiveMQTopic("testTopic");// 话题(一对多)

		// 接收者(创建多个接受这)
		MessageConsumer consumer = session.createConsumer(topic);
		// 监听
		consumer.setMessageListener(new MessageListener() {
			public void onMessage(Message message) {
				if (message instanceof TextMessage) {
					TextMessage textMessage = (TextMessage) message;// 这里需要将消息转换为我们需要的类型
					try {
						System.out.println("consumer Message:" + textMessage.getText());
					} catch (JMSException e) {
						e.printStackTrace();
					}
				}
			}
		});

		MessageConsumer consumer2 = session.createConsumer(topic);
		// 监听
		consumer2.setMessageListener(new MessageListener() {
			public void onMessage(Message message) {
				if (message instanceof TextMessage) {
					TextMessage textMessage = (TextMessage) message;// 这里需要将消息转换为我们需要的类型
					try {
						System.out.println("consumer Message:" + textMessage.getText());
					} catch (JMSException e) {
						e.printStackTrace();
					}
				}
			}
		});
		
		consumer2.close();
	}


你可能感兴趣的:(java,activemq)