ActiveMQ教程(消息发送和接受)
一 环境的搭建
version为你的版本号
如果你是普通的项目的话,创建一个lib文件夹,导入相应的jar包到你的lib中,jar包为:activemq-all-{version}.jar、log4j-{version}.jar、slf4j-log4j12-{version}.jar,并且bulidpath,将jar加载到你的项目中就可以使用了。
如果是web项目,需要将以上的jar包导入到你的web-inf的lib中,将自动加载到你的工程中。
如果你是一个mave工程,需要修改你的pom.xml文件,添加相关的依赖:(如下)
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>{version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>{version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>{version}</version>
</dependency>
相应的版本可以去maven的资源库中下载:http://www.mvnrepository.com。
导入相应的jar包之后就可以进行相应的开发了,现在我们开发发送端。创建创建一个普通的java类,名称为ActiveMqUtil
import java.util.Date;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
public class ActiveMqUtil {
public static void senderMessage(String message){
//链接工厂
ConnectionFactory connectionFactory;
//创建链接
Connection connection = null;
//创建一个session
Session session;
//创建目的地
Destination destination;
//消息提供者
MessageProducer messageProducer;
//构造ConnectionFactory
connectionFactory = new org.apache.activemq.ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616");
// 设置用户名和密码,这个用户名和密码在conf目录下的credentials.properties文件中,也可以在activemq.xml中配置,我这里是默认的,所以就注释掉了
//connectionFactory.setUserName("应户名");
//connectionFactory.setPassword("密码");
try {
//得到连接对象
connection = connectionFactory.createConnection();
//启动链接
connection.start();
// 创建Session,参数解释:
// 第一个参数是否使用事务:当消息发送者向消息提供者(即消息代理)发送消息时,消息发送者等待消息代理的确认,没有回应则抛出异常,消息发送程序负责处理这个错误。
// 第二个参数消息的确认模式:
// AUTO_ACKNOWLEDGE : 指定消息提供者在每次收到消息时自动发送确认。消息只向目标发送一次,但传输过程中可能因为错误而丢失消息。
// CLIENT_ACKNOWLEDGE : 由消息接收者确认收到消息,通过调用消息的acknowledge()方法(会通知消息提供者收到了消息)
// DUPS_OK_ACKNOWLEDGE : 指定消息提供者在消息接收者没有确认发送时重新发送消息(这种确认模式不在乎接收者收到重复的消息)。
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
//获取服务商的消息
destination = session.createQueue("你的active里面创建的que的名称");
//得到消息的发送者
messageProducer = session.createProducer(destination);
messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
sendMessage(session, messageProducer,message);
session.commit();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(null != connection){
connection.close();
}
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void sendMessage(Session session,MessageProducer messageProducer,String messages) throws JMSException{
TextMessage message = session.createTextMessage(messages);
//发送消息到服务器
messageProducer.send(message);
}
}
之后创建一个测试类,Test
public class Test{
public static void main(String [] args){
ActiveMqUtil.senderMessage("发送者提供的消息!");
}
}
运行test的main方法,进行相应的发送。现在你可以访问你安装的activemq的页面去查看相应的信息。这个que的Number Of Consumers会多一条记录,代表发送成功。
现在发送者已经发送成功,现在我们开发接受端。创建一个类,名称为Reciver
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Reciver {
public static void main(String[] args) {
//创建工厂
ConnectionFactory connectionFactory;
//创建connection
Connection connection = null;
//创建session
Session session;
//创建目的地
Destination destination;
//消费者
MessageConsumer consumer;
//得到工厂
connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD , "tcp://localhost:61616");
try {
//创建链接
connection = connectionFactory.createConnection();
//启动
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//获取服务器上的消息
destination = session.createQueue("yc-security-mq");
consumer = session.createConsumer(destination);
while(true){
TextMessage message = (TextMessage) consumer.receive(100000);
if(null != message){
System.out.println(message.getText());
}else{
break;
}
}
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try{
if(null != null){
connection.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}
运行这个测试类,将会显示:发送者提供的消息!,这时代表接受端成功。在activemq安装的页面上,Messages Dequeued 将会增加一条。
ActiveMQ教程(消息发送和接受)的更多相关文章
- ActiveMQ实现消息的发送与接受
activemq是apache的一个JMS接口的实现产品,java中定义了JMS规范,虽然RocketMQ,kafka现在比较火,但是还是建议先学一下activeMQ再学其他两个就容易很多 首先可以下 ...
- activemq安装与简单消息发送接收实例
安装环境:Activemq5.11.1, jdk1.7(activemq5.11.1版本需要jdk升级到1.7),虚拟机: 192.168.147.131 [root@localhost softwa ...
- ActiveMQ点对点的消息发送案例
公司最近会用MQ对某些业务进行处理,所以,这次我下载了apache-activemq-5.12.0-bin把玩下. 基于练习方便需要,使用Windows的版本. 参考的优秀文章: activemq的几 ...
- ActiveMQ(2)---ActiveMQ原理分析之消息发送
持久化消息和非持久化消息的发送策略 消息同步发送和异步发送 ActiveMQ支持同步.异步两种发送模式将消息发送到broker上.同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消 ...
- 【ActiveMQ】ActiveMQ在Windows的安装,以及点对点的消息发送案例
公司最近会用MQ对某些业务进行处理,所以,这次我下载了apache-activemq-5.12.0-bin把玩下. 基于练习方便需要,使用Windows的版本. 参考的优秀文章: activemq的几 ...
- ActiveMQ JMS实现消息发送
一.创建配置消息发送接收目的地. ActiveMQ中间件地址 JMS_BROKER_URL=failover://(tcp://192.168.1.231:61616) QUEUE_BUSP_TP_S ...
- ActiveMQ发消息和收消息
来自:http://blog.163.com/chengwei_1104/blog/static/53645274201382315625329/ ActiveMQ 是Apache出品,最流行的,能力 ...
- 消息中间件--ActiveMQ&JMS消息服务
### 消息中间件 ### ---------- **消息中间件** 1. 消息中间件的概述 2. 消息中间件的应用场景 * 异步处理 * 应用解耦 * 流量削峰 * 消息通信 --------- ...
- 转 Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和优势
Kafka.RabbitMQ.RocketMQ等消息中间件的对比 —— 消息发送性能和优势 引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前 ...
随机推荐
- ionic 打包
比如我下载一个官方的小Demoionic start myApp tabs(我默认你已经配置好了安卓的开发环境.安装了全局的ionic.cordova) 首先,你需要给项目添加安卓平台的支持ion ...
- 『NiFi 节点本地流与集群流不一致导致集群加入失败』问题解决
一.概述 在某些极端情况下,某些 NiFi 节点信息会由于用户强行 disconnect from cluster ,而出现 local flow 与 cluster 的 flow 不同步的问题. 此 ...
- Salesforce学习第一天
好久没有在博客园发布学习博客了,开学事情多,奇葩心思多嘛,谅解.现在在一家公司实习Salesforce开发,每天都在看英文文档,然后学着操作,只可惜没人能培训下,学习起来进度比较慢.英文的文档看的思绪 ...
- javascript 理解对象--- 属性类型
ECMA-262 把对象定义为:无序属性的集合,其属性可以包含基本值.对象或者函数: var Person = { name:"wsc", age :"25", ...
- SSIS 2012 Error: An Integration Services class cannot be found
升级SSIS到SQL Server 2012,服务器只安装了SSIS一个功能,应用程序执行dtsx包时报错如下: An Integration Services class cannot be fou ...
- 对Java CAS的一些了解(正在整理学习中)
①引言 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问题 ...
- string integer == equals 转
java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(== ...
- [2012-12-18 14:59:31]AS3 常用正则表达式的总结-不用google了,我帮收集的很多了
正则表达式是一种通用的标准,大部分计算机语言都支持正则表达式,包括as3,这里转摘出了一些常用的正则表达式语句,大家用到的时候就不用自己写了.红色字体为常用正则:下面这个类是我自己写的一个示例,想必大 ...
- armv7 armv7s arm64 i386 x86_64
开发SDK的同学需要了解这些指令集代表什么. armv7|armv7s|arm64都是ARM处理器的指令集 i386|x86_64 是Mac处理器的指令集 arm64:iPhone7 | iphone ...
- java并发之Lock以及和synchronized区别
从Java5之后,在Java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock. 1.Lock 首先要说明的就是Lock,通过查看Lock的源码可知,Lo ...