用定時器傳送訊息,activemq總是報WARN報錯
2014-02-22 16:21:02,843 | WARN | Transport Connection to: tcp://10.18.222.21:4751 failed: java.net.SocketException: Connection reset | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport: tcp:///10.18.222.21:[email protected]
2014-02-22 16:21:02,843 | WARN | Transport Connection to: tcp://127.0.0.1:4743 failed: java.net.SocketException: Connection reset | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport: tcp:///127.0.0.1:
在專案中終於解決了這個困擾很久的問題,一直想不到是這個原因,還以為MQ有BUG,
mqConnFactory = new ActiveMQConnectionFactory(config.getMqConfig().getUrl());
connection = mqConnFactory.createConnection();
當時有2個方法都使用mqConnFactory.createConnection();一個是初始化,一個是檢查mq狀態,mqConnFactory.createConnection();一次就行了!
以下程式碼是另外一個測試程式,以上面無關。
傳送端:
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class MessageSendAndReceive {
public static Scheduler sched;
public static void main(String[] args) throws Exception {
MessageSendAndReceive.run();
}
public static void send() throws Exception {
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("TestQueue");
Message message = session.createTextMessage("Hello JMS!");
MessageProducer producer = session.createProducer(destination);
producer.send(message);
System.out.println("Send Message Completed!");
// MessageConsumer comsumer = session.createConsumer(destination);
// Message recvMessage = comsumer.receive();
// System.out.println("Received:" + ((TextMessage)
// recvMessage).getText());
producer.close();
session.close();
connection.close();
}
public static void run() throws Exception {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
// 通過schedulerFactory獲取一個排程器
sched = schedulerFactory.getScheduler();
// 建立jobDetail例項,繫結Job實現類
// 指明job的名稱,所在組的名稱,以及繫結job類
// 建立LzstoneTimeTask的定時任務
JobDetail jobDetail = JobBuilder.newJob(LzstoneTimeTask.class)
.withIdentity("lzstoneJob", Scheduler.DEFAULT_GROUP).build();
// 目標 建立任務計劃
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("simpleTrigger", "triggerGroup")
.withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?")).startNow().build();
// 0 0 12 * * ? 代表每天的中午12點觸發
// 把作業和觸發器註冊到任務排程中
sched.scheduleJob(jobDetail, trigger);
// 啟動排程
sched.start();
}
// 停止
public static void stop() throws Exception {
sched.shutdown();
}
}
Job:
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class LzstoneTimeTask implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
try {
// 執行的定時器任務
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("TestQueue");
Message message = session.createTextMessage("Hello JMS!");
MessageProducer producer = session.createProducer(destination);
// 訊息為非持久化訊息
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
// 設定心跳訊息的存活時間,因為會定時傳送,所以,沒有必要永久存在。
producer.setTimeToLive(1 * 1000);
producer.send(message);
System.out.println("Send Message Completed!");
// MessageConsumer comsumer = session.createConsumer(destination);
// Message recvMessage = comsumer.receive();
// System.out.println("Received:" + ((TextMessage)
// recvMessage).getText());
producer.close();
session.close();
connection.close();
} catch (Exception e) {
}
}
}
監聽:
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.ExceptionListener;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Jms_Receiver_Listener extends Thread implements MessageListener, ExceptionListener {
// ConnectionFactory :連線工廠,JMS 用它建立連線
ConnectionFactory connectionFactory;
// Connection :JMS 客戶端到JMS Provider 的連線
Connection connection = null;
// Session:一個傳送或接收訊息的執行緒
Session session;
// Destination :訊息的目的地
Destination destination;
// 訊息接收者
MessageConsumer consumer;
public Jms_Receiver_Listener() {
String url = "tcp://localhost:61616";
// 在ActiveMq的console配置的queue的名字
String queue = "TestQueue";
connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD, url);
// 構造從工廠得到連線物件
try {
connection = connectionFactory.createConnection();
connection.setExceptionListener(this);// 異常處理
connection.start();// 連線啟動
// 如果為true,則佇列裡面的訊息沒有被取走,繼續存在
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 獲取session,
destination = session.createQueue(queue);
consumer = session.createConsumer(destination);
} catch (JMSException e) {
System.err.println("Create fail!");
e.printStackTrace();
}
}
public void run() {
try {
consumer.setMessageListener(this);
} catch (JMSException e) {
System.err.println(" MessageListener failed...");
e.printStackTrace();
}
}
public void onMessage(Message message) {
try {
if (message instanceof TextMessage) {
TextMessage txtMsg = (TextMessage) message;
String msg = txtMsg.getText();
System.out.println("Received: " + msg);
}
} catch (JMSException e) {
System.err.println("The process of getting a message failed...");
e.printStackTrace();
}
}
// 非同步訊息異常處理
public void onException(JMSException arg0) {
System.err.println("JMS異常!");
}
// 測試程式
public static void main(String[] args) {
Jms_Receiver_Listener jrl = new Jms_Receiver_Listener();
jrl.start();
}
}
相關推薦
用定時器傳送訊息,activemq總是報WARN報錯
2014-02-22 16:21:02,843 | WARN | Transport Connection to: tcp://10.18.222.21:4751 failed: java.net.SocketException: Connection reset | o
用定時器寫時鐘
在頁面中可以看到用定時器來寫的那些小時鐘,今天我們就來簡單的實現一下這樣的小功能: 實現時鐘需要注意到的 是: 1.在獲取月份的時候要注意到,getMonth方法是從0開始的,使用的時候要注意的是要加一。 2.用getDay的時候,注意星期日是0,使用的時候要注意。 3.使用定時器的
定時器的顏色,大小,位置全部隨機
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title>柱狀圖</title> <style type="text/css"> canvas { border
spring 整合mybatis——多資料來源切換(附帶定時器的配置,儲存過程連線,資料多於50條,分批進行操作)
新建com.millery.utils包在其下新建DataSourceContextHolder類 package com.millery.utils; public class DataSourceContextHolder { private
JS定時器(setTimeout,setInterval)
一次性定時器 setTimeout <script> function show(){ alert("廣告廣告。。。"); }
quartz定時器的使用,定時任務的動態增刪改
目錄 一、簡介: 二、使用: 三、測試: 一、簡介: Java的定時任務通常使用以下方式: 使用JDK自帶的Timer 使用quartz框架 這裡主要是使用quartz來實現。Quartz是一款效能強大的定時任務排程器。開發人員可以使用Qua
高效蜂鳴器驅動法:用定時器掃描代替軟體延時
上班跟上學果然不一樣,就比如一個蜂鳴器的驅動,學生時代寫蜂鳴器的程式倒也直觀: PWM_SET(0x0a,0x80);//PWM0輸出4.24Khz,佔空比50% Delay_ms(200);//延時200ms
網頁版聊天系統用快捷鍵傳送訊息的實現、
收集的資訊如下: 部落格園(用PostMessage 向Windows視窗傳送Alt組合鍵): http://www.cnblogs.com/willen/archive/2008/10/22/1316523.html (仿QQ): https://github.c
JS用定時器製作時鐘
製作思路 1.首先需要時鐘的背景圖片,時針圖片,分針圖片,秒針圖片。鍾背景圖片固定(相對定位),時/分/秒針圖片旋轉(絕對定位); 2.設定定時器; 3.獲取系統時間,時/分/秒/毫秒; 4.秒針圖片每秒旋轉6°,分針每分針旋轉6°,時針每小時旋轉30°。 <!DOCTYPE
微信裡面的簽到加積分介面(已經測試過沒問題)服務號不能每天傳送訊息,為了避免這個,每天簽到的時候,推送一條最新的訊息給客戶。
public string QianDao(string WeiXinId, string key)//引數是微訊號 { strs = WeiXinId.Trim() + "WJXFGCLN+Mihaha";
Springboot+websocket+定時器實現訊息推送
由於最近有個需求,產品即將到期(不同時間段到期)時給後臺使用者按角色推送,功能完成之後在此做個小結 1. 在啟動類中添加註解@EnableScheduling import org.mybatis.spring.annotation.MapperScan; import
WebSocket傳送訊息,大於126位元組和大於65535位元組的處理
網上搜了一下WebSocket的合包函式,發現不能直接使用。查了很多資料,終於弄出來了,大於65535位元組的沒有測試,但是小於65535的測試通過下面是C#程式碼,其他程式碼根據此程式碼修改即可public static byte[] PackData(string message) {
微信小程式用定時器實現倒計時效果
平常在微信小程式開發的時候,因專案的需求,倒計時必不可少,下面主要講解定時器在微信小程式中的使用。這裡要先宣告一點的就是,該篇主要實現倒計時功能,而且實現是時長較短的倒計時,其他的優化什麼的不作主要考慮。如果實現簡單的60s倒計時效果,我們可直接使用setInterval即可
用定時器控制Led燈閃爍
實驗目的 閃燈程式在嵌入式學習中猶如“Hello World!”在C/C++語言學習中一樣經典。它以簡單的方式引導了無數的嵌入式愛好者。通過本節的學習你可以基本瞭解STM32的GPIO以及基本定時器的使用。 硬體說明 本例程需要一個定時器和一個LED,其中LED就是擴充套件板上的紅色LED接在PD3上且正極接
簡單的一個用定時器控制的流水燈c程式
用定時器以間隔500MS在6位數碼管上依次顯示0、1、2、3….C、D、E、F,重複。 #include<reg52.h> typedef unsigned int u8; typede
python 傳送訊息到ActiveMq
生產: 你可以產生訊息 通過POST request to the server, like curl -u admin:admin -d "body=message" http://localhost:8161/api/message/TEST?type=queue
Handler傳送訊息,週期性更新UI總結
1.Handler的作用 handler是用於執行緒間傳送訊息和處理訊息的。 2.Handler傳送訊息的方式 1.最常用的方式是: handler.sendMessage()、handler.sendEmptyMessage()、handler.s
51微控制器組合語言程式設計:用定時器控制輸出矩形波
80C51微控制器的時鐘頻率為12MHz,利用定時器T1和P1.0輸出矩形脈衝。波形只畫出了2段:一段為100us 另一段為50us。要完全的、完整的、詳細的編寫此程式的過程!謝謝懸賞分:5 | 解決時間:2011-1-9 15:24------------------------最佳答案:用一個定時器定時
STM32F103的普通定時器中斷問題,存在開機後初始化,一開啟允許中斷,定時器立刻進入中斷函式一次
問題: 存在開機後初始化,在TIM3_Int_Init()裡面,一開啟允許中斷函式TIM_ITConfig(),定時器立刻進入中斷函式一次。只進一次。初始化函式最後已經關閉定時器:TIM_Cmd(TIM3, DISABLE); //暫關閉TIMx外設。將這個函式提到初始化
檢視當前伺服器中的所有的topic,建立topic,刪除topic,通過shell命令傳送訊息,通過shell消費訊息,檢視topic詳情,對分割槽數進行修改
一、 Kafka常用操作命令 檢視當前伺服器中的所有topic [root@hadoop3 kafka]# bin/kafka-topics.sh --list --zookeeper hadoop11:2181 [root@hadoop3 kafk