javaactivemq
㈠ java利用ActiveMQ达到实时更新状态
我们以前这么做的. Socket 传和收数据. 我们是在struts的action里面 开启socket的 然后发送数据 等待返回的数据 然后在显示数据.
至于修改 那也一样的action处理数据 发送数据 等待接收数据.
在进行通信的时候 进制之间的转换 是很常见的 .
㈡ 请教java怎么向activemq发送消息
一.Prop类(用来读取属性文件,单例)
package com.sitinspring.standardWeblogicJms;
import java.io.FileInputStream;
import java.util.Hashtable;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
public class Props {
private static final String File_Name = "jmsSetting.properties";
private static Properties propts;
public static void makeProptsInstance() {
propts = new Properties();
try {
propts.load(new FileInputStream(File_Name));
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static String get(String name){
if(propts==null){
makeProptsInstance();
}
return (String)propts.get(name);
}
@SuppressWarnings("unchecked")
public static Context getInitialContext(){
Context context=null;
String jndiFactory=Props.get("jndi.factory");
String providerUrl=Props.get("jndi.provider.url");
Hashtable env=new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, jndiFactory);
env.put(Context.PROVIDER_URL, providerUrl);
try {
context=new InitialContext(env);
} catch (Exception ex) {
ex.printStackTrace();
}
return context;
}
}
二.QueueBase类(QueueComsumer和QueueSupplier的基类,用于归纳一些两类共通的东西)
package com.sitinspring.standardWeblogicJms;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.naming.Context;
public class QueueBase{
protected QueueConnectionFactory queueConnectionFactory;
protected QueueConnection queueConnection;
protected QueueSession queueSession;
protected Queue queue;
public QueueBase(Context context){
try{
String jmsFactory=Props.get("jms.factory");
queueConnectionFactory=(QueueConnectionFactory)context.lookup(jmsFactory);
queueConnection=queueConnectionFactory.createQueueConnection();
queueSession=queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
String queueName=Props.get("queue.name");
queue=(Queue)context.lookup(queueName);
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
三.QueueComsumer类(用于接收消息)
package com.sitinspring.standardWeblogicJms;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.QueueReceiver;
import javax.jms.TextMessage;
import javax.naming.Context;
public class QueueComsumer extends QueueBase implements MessageListener {
private QueueReceiver queueReceiver;
public QueueComsumer(Context context) {
super(context);
try {
queueReceiver = queueSession.createReceiver(queue);
queueReceiver.setMessageListener(this);
queueConnection.start();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage txtmsg = (TextMessage) message;
try {
System.out.println("I have received the TextMassage:"
+ txtmsg.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
public void close() throws JMSException {
queueReceiver.close();
queueSession.close();
queueConnection.close();
}
public static void main(String[] args) {
Context context = Props.getInitialContext();
QueueComsumer queueComsumer = new QueueComsumer(context);
synchronized (queueComsumer) {
while (true) {
try {
queueComsumer.wait();
} catch (InterruptedException interruptedException) {
interruptedException.printStackTrace();
try {
queueComsumer.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
}
}
四.QueueSupplier类(用于发送消息)
package com.sitinspring.standardWeblogicJms;
import javax.jms.JMSException;
import javax.jms.QueueSender;
import javax.jms.TextMessage;
import javax.naming.Context;
public class QueueSupplier extends QueueBase {
private QueueSender queueSender;
public QueueSupplier(Context context) {
super(context);
try {
queueSender = queueSession.createSender(queue);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void sendMsg(String msg) throws JMSException {
TextMessage txtMsg = queueSession.createTextMessage();
txtMsg.setText(msg);
queueConnection.start();
queueSender.send(txtMsg);
}
public void close() throws JMSException {
queueSender.close();
queueSession.close();
queueConnection.close();
}
public static void main(String[] args) {
Context context = Props.getInitialContext();
QueueSupplier queueSupplier = new QueueSupplier(context);
try {
queueSupplier.sendMsg("Hello World");
System.out.println("A message have been sent!");
} catch (JMSException ex) {
ex.printStackTrace();
} finally {
try {
queueSupplier.close();
} catch (JMSException ex) {
ex.printStackTrace();
}
}
}
}
㈢ 请用白话讲解ActiveMQ的用途
用途就是用来处理消息,也就是处理JMS的。消息队列在大型电子商务类网站,如京东、淘宝、去哪儿等网站有着深入的应用,队列的主要作用是消除高并发访问高峰,加快网站的响应速度。
在不使用消息队列的情况下,用户的请求数据直接写入数据库,高发的情况下,会对数据库造成巨大的压力,同时也使得系统响应延迟加剧,但使用队列后,用户的请求发给队列后立即返回。
例如:不能直接给用户提示订单提交成功,京东上提示:“您提交了订单,请等待系统确认”再由消息队列的消费者进程从消息队列中获取数据,异步写入数据库。
由于消息队列的服务处理速度远快于数据库,因此用户的响应延迟可得到有效改善。
(3)javaactivemq扩展阅读:
ActiveMQ主要有以下几种使用场景
1、异步调用。
2、一对多通信。
3、做多个系统的集成、同构、异构。
4、作为RPC的替代。
5、多个应用相互解耦。
6、作为事件驱动架构的幕后支撑。
7、为了提高系统的可伸缩性。
㈣ activemq和rabbitmq谁更适合java学习
activemq更贴切java,想学习Java推荐选择【达内教育】,该机构拥有行业内完善的教研团队,强大的师资力量,确保学员利益,全方位保障学员学习。
学习JAVA需要注意的地方:
1、刚学习的时候要注意看相关的入门的书。对于这类书要自己研读,也可以把书当作一个类库来查阅。
2、在看书的同时也要多看看网上相关的视频。主要看一位老师的视频,跟着老师的思路和顺序走。
3、在学习的过程中建立一个目标,让自己能够始终坚持不放弃。
4、学习的过程中会遇到很多的困难,会产生很多疑惑。不要急躁,不要放弃,想尽一切办法去解决。
5、不能只看理论不去动手实践。很多想不通的问题可以通过动手实践去解决。感兴趣的话点击此处,免费学习一下
想了解更多有关Java培训的相关信息,推荐咨询【达内教育】。秉承“名师出高徒、高徒拿高薪”的教学理念,是达内公司确保教学质量的重要环节。作为美国上市职业教育公司,诚信经营,拒绝虚假宣传是该机构集团的经营理念。该机构在学员报名之前完全公开所有授课讲师的授课安排及背景资料,并与学员签订《指定授课讲师承诺书》,确保学员利益。达内IT培训机构,试听名额限时抢购。
㈤ Java/Android:关于ActiveMQ与MQTT的关系是什么
mq是队列
tt是推送
mqtt是
推送队列
mq是单纯的队列
推送的话
不能一下子全部推送完
也是需要队列一个一个来推送
㈥ java activemq 发送者怎么设置clientid
在启动activemq.bat,编辑 里面的 java_home 参数,改成需要引用的jdk的实际路径。或者在该文件中重新设置JAVA_HOME
㈦ Java/Android:关于ActiveMQ与MQTT的关系是什么
实在看不下去了,网上怎么竟是些胡说八道的呢。太坑人。MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,activemq只是apache下一个队列项目,不仅仅支持MQTT协议,也支持其他比如AMQP等协议。MQTT是协议,协议只是定义好的规则,比如文档也是协议。activemq只是实现了MQTT协议的一个程序
㈧ java 发送activemq 每次都需要创建一个topic吗
jms的一个标准或者说是一个协议.通常用于企业级应用的消息传递.主要有topic消息(1对多),queue消息(1对1).activemq是一个jms的实现,apache出的.另外还其它的实现jboss啦啥的
㈨ Java 开源消息队列ActiveMQ等
你这个Queue是一个在内存里的数据结构类,提供了入队出队方法。实例化以后可以使用。
MessageQueue是一个Java的协议,是基于标准的,ActiveMQ是这个协议标准的具体实现。这个队列具有MessageQueue的通用功能,例如支持:发布者-订阅者,点到点的多种方式。用于SOA的大型分布式环境,12306抢票的时候你看见有多少人排队等待,就是使用的这个。
12306的后台服务器是分布式的,比如接受订票功能有100台服务器,一个LinkedBlockingQueue的范围只是一台机器,这样的话就会出现多个队,而且功能单一。这时候就会把订票请求发送给MessageQueue ,这个东西是分布式、异步的。。。。是完全不同的两个东西,没有可比性
㈩ 用java代码如何设置activemq消息持久化到数据库中
ActiveMQ持久化消息的二种方式;
1、持久化为文件
这个装ActiveMQ时默认就是这种,只要设置消息为持久化就可以了。涉及到的配置和代码有:
<persistenceAdapter>
<kahaDB directory="${activemq.base}/data/kahadb"/>
</persistenceAdapter>
procer.Send(request, MsgDeliveryMode.Persistent, level, TimeSpan.MinValue);
2、持久化为Mysql
首先需要把MySql的驱动放到ActiveMQ的Lib目录下,我用的文件名字是:mysql-connector-java-5.0.4-bin.jar
接下来修改配置文件
<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#derby-ds"/>
</persistenceAdapter>
在配置文件中的broker节点外增加
<bean id="derby-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
<property name="username" value="activemq"/>
<property name="password" value="activemq"/>
<property name="maxActive" value="200"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
从配置中可以看出数据库的名称是activemq,需要手动在MySql中增加这个库。
然后重新启动消息队列,会发现多了3张表
1:activemq_acks
2:activemq_lock
3:activemq_msgs