JMS编程模型

JMS定义了Java中访问消息中间件的一组接口,主要包括ConnectionFactory、Connection、Session、Destination、MessageProducer、MessageConsumer、Message等,这些接口的具体实现由具体的消息中间件完成。以ActiveMQ为例,类javax.jms.Connection定义了接口,具体实现类为org.apache.activemq.ActiveMQConnection。在JMS编程模型中,JMS客户端使用ConnectionFactory对象创建一个Connection,消息服务发送及接收消息都通过该连接进行,创建Connection时需要验证客户端身份同时分配通信资源,大部分客户端只用一个Connection来进行所有的消息传送。既然只有一个Connection,怎么创建多个队列呢?Connection用于创建会话Session,Session是一个用于生成和使用消息的单线程上下文,Session用于创建Producer、Consumer、Destination、TextMessage等对象,其它的属性在具体的对象方法内设置。

编程实例

Producer

package com.activemqtest.client;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory; public class Sender { public static void main(String[] args) {
// TODO Auto-generated method stub
ConnectionFactory connectionFactory;
Connection connection = null;
Session session;
Destination destination;
MessageProducer messageProducer; connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://172.16.1.15:20001"); try {
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); // 第一个True设置是否支持事务性 第二个参数用于设置回执模式
destination = session.createQueue("Peter_Test_Queue1");
messageProducer = session.createProducer(destination);
messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);// 设置是否持久化消息
sendMessage(session, messageProducer);
session.commit(); // 事务性提交
} catch(Exception e) {
e.printStackTrace();
} finally {
try {
if(null != connection){
connection.close(); // 关闭连接
}
} catch (Throwable ignore) { }
} } public static void sendMessage(Session session, MessageProducer producer)throws Exception {
for (int i = 1; i <= 10; i++){
TextMessage message = session.createTextMessage("ActiveMQ 发送的消息" + i); // 创建消息
System.out.println("发送消息: "+ "ActiveMQ发送的消息" + i);
producer.send(message); // 发送消息
}
} }

Consumer  

package com.activemqtest.client;

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.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory; public class Receiver { public static void main(String[] args) {
// TODO Auto-generated method stub
ConnectionFactory connectionFactory;
Connection connection = null;
Session session;
Destination destination;
MessageConsumer consumer; connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://172.16.1.15:20001"
); try {
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("Peter_Test_Queue");
consumer = session.createConsumer(destination);
while(true){
TextMessage message = (TextMessage)consumer.receive(100);
if (null != message){
System.out.println("收到消息==="+message.getText());
}else{
break;
}
} }catch (Exception e){
e.printStackTrace();
}finally{
try {
if(null != connection){
connection.close();
}
} catch (Throwable ignore){ }
}
}
}

  

ActiveMQ-如何使用JMS API?的更多相关文章

  1. ActiveMQ之二--JMS消息类型

    1.前言 //发送文本消息 session.createTextMessage(msg); //接受文本消息 public void onMessage(Message msg) { TextMess ...

  2. ActiveMQ基础教程JMS概述

    什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息 ...

  3. ActiveMQ (二):JMS

    1.前言 由于ActiveMQ是一种完全符合JMS规范的一种通信工具,所以在使用ActiveMQ前认识JMS规范就变的十分必要了. 认识JMS主要从以下方面: a. JMS 模型 b. JMS 对象模 ...

  4. JMS API学习总结(一)

    三.JMS API简析 顶级接口 P2P Pub/sub 备注 ConnectionFactory QueueConnectionFactory TopicConnectionFactory 基于工厂 ...

  5. 学习ActiveMQ(六):JMS消息的确认与重发机制

    当我们发送消息的时候,会出现发送失败的情况,此时我们需要用到activemq为我们提供了消息重发机制,进行消息的重新发送.那么我们怎么知道消息有没有发送失败呢?activemq还有消息确认机制,消费者 ...

  6. 【ActiveMQ】Spring Jms集成ActiveMQ学习记录

    Spring Jms集成ActiveMQ学习记录. 引入依赖包 无论生产者还是消费者均引入这些包: <properties> <spring.version>3.0.5.REL ...

  7. Spring整合ActiveMQ:spring+JMS+ActiveMQ+Tomcat

    一.目录结构 相关jar包 二.关键配置activmq.xml <?xml version="1.0" encoding="UTF-8"?> < ...

  8. 04.ActiveMQ与Spring JMS整合

        SpringJMS使用参考:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jms.html ...

  9. JMS API(二)

    JMS 公共API 接口共7个: 1.ConnectionFactory 2.Destination 3.Connection 4.Session 5.Message 6.MessageProduce ...

随机推荐

  1. eclipse启动报错: No Java virtual machine

    在 scala-ide下载集成scala包的eclipse版本使用,启动时报错: A java runtime environment (JRE) or java development kit (J ...

  2. CIR,CBS,EBS,PIR,PBS 名词解释 令牌桶应用

    为了达到上述目的,我们需要对进入网络的流量进行监督,实现CAR(Committed Access Rate). CAR:将进入网络的用户流量的速率限制在约定的范围之内,从而避免引起网络拥塞. CIR( ...

  3. c#数据库连接 出现错误提示:keyword not supported:'connection timeour'

    连接字符串错误,如  User Id  被换行了,导致无效字符串 请检查连接字符串是否正确

  4. 【CF331E】Biologist(网络流,最小割)

    [CF331E]Biologist(网络流,最小割) 题面 洛谷 翻译: 有一个长度为\(n\)的\(01\)串,将第\(i\)个位置变为另外一个数字的代价是\(v_i\). 有\(m\)个要求 每个 ...

  5. Java--Inheritance constructor继承中的构造方法问题(二)

    看了前辈的博客,觉得这两点说的精辟:子类构造方法必须要调用父类的某个构造方法:被子类调用的父类构造方法在父类中必须是存在的. 上篇的例子有一点不明白,子类继承了父类的成员变量,父类的构造函数里引用了该 ...

  6. 图像处理之中值滤波介绍及C实现

    1 中值滤波概述 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号平滑处理技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. 中值滤波的基本原理是把数字图像或数字序 ...

  7. 通过ida dump Uinity3D的加密dll

    声明: 1.本文转载自:http://www.52pojie.cn/thread-398266-1-1.html,仅供自己保存使用,高手勿喷 2.欢迎学习交流 通过ida dump Uinity3D的 ...

  8. 简单实现VUE的双向数据绑定

    <!DOCTYPE html> <html> <head> <title>vue-双向数据绑定的简单实现</title> </head ...

  9. NOIP 2014 提高组 Day1

    期望得分:100+100+50=250 实际得分:100+100+50=250 此次NOIP  ZJ省一分数线:500,SD:345 https://www.luogu.org/problem/lis ...

  10. c# WebService SOAP及Rest调用

    SOAP及Rest的调用区别参照如下: REST似乎在一夜间兴起了,这可能引起一些争议,反对者可以说REST是WEB诞生之始甚而是HTTP出现之日就相伴而生的原则.但是毋庸置疑的事实是,在Google ...