activemq faq(使用中遇到的問題,大多在這裡可以找到):
紅眼web觀察:
activemq中的訊息永續性:
結合spring使用activemq進行非同步訊息呼叫:
activemq中的安全機制:
結合spring2.0和activemq進行非同步訊息呼叫:
activemq(ver 3.2.1)的jndi支援:
liferay 使用activemq時,每次啟動都會重新生成derby,無法重發因為服務停止時,滯留在訊息佇列的訊息。首先就要配置activemq每次從同乙個資料庫訪問,增加乙個broker(詳見《紅眼web觀察》)
但此時仍然無法保證因為網路問題、伺服器繁忙、郵件伺服器問題等引起的無法正確投遞的問題。
因為session沒有使用事務,在出錯丟擲異常時沒有回滾。
queuesession session = con.createqueuesession(false,session.auto_acknowledge);
即使使用事務,並且出錯回滾的話仍然有問題。假如是因網路問題無法連線到郵件伺服器等大問題時,
回滾後會繼續傳送本條訊息,此時因網路問題不可能一時解決,jms就持續不斷的傳送該訊息,會導致cpu 100%。
這樣看來事務回滾也不是好的方法,只有在出錯時記錄到自己的db中,然後寫乙個job或是task,每隔一段時間對因錯沒有傳送的訊息重新傳送,也就是將其放置重新到佇列當中。
同樣的問題也存在將訊息放置到佇列中的情況,無法保證放置時出錯後訊息的重發,也要在出錯時將訊息儲存到自己的db中。
activemq derby的指令碼:
alter table activemq_txs drop constraint sql070117092033990;
alter table activemq_msgs drop constraint sql070117092033260;
alter table activemq_acks drop constraint sql070117092034180;
drop index sql070117092033260;
drop index sql070117092033990;
drop index sql070117092034180;
drop index activemq_msgs_cidx;
drop index activemq_acks_cidx;
drop index activemq_msgs_midx;
drop table activemq_msgs;
drop table activemq_acks;
drop table activemq_txs;
create table activemq_msgs (
id integer not null,
container varchar(250),
msgid varchar(250),
msg blob(1048576),
expiration bigint,
sent_to_deadletter char(1)
);create table activemq_acks (
sub varchar(250) not null,
container varchar(250) not null,
last_acked_id integer,
se_id integer,
se_client_id varchar(250),
se_consumer_name varchar(250),
se_selector varchar(250)
);create table activemq_txs (
xid varchar(250) not null
);create unique index sql070117092033260 on activemq_msgs (id asc);
create unique index sql070117092033990 on activemq_txs (xid asc);
create unique index sql070117092034180 on activemq_acks (sub asc, container asc);
create index activemq_msgs_cidx on activemq_msgs (container asc);
create index activemq_acks_cidx on activemq_acks (container asc);
create index activemq_msgs_midx on activemq_msgs (msgid asc);
alter table activemq_txs add constraint sql070117092033990 primary key (xid);
alter table activemq_msgs add constraint sql070117092033260 primary key (id);
alter table activemq_acks add constraint sql070117092034180 primary key (sub, container);
注:用mysql 的話,表activemq_txs的字段sub和container 長度改為150.詳見《activemq中的訊息永續性》
自己資料庫訪問訊息的pojo:
public class mailmessage implements serializable
public void setserialiablemsg(serializable serialiablemsg)
public long getid()
public void setid(long id)
protected blob getmessage()
protected void setmessage(blob message)
ActiveMQ使用總結
1 activemq支援訊息過濾設定規則和用法 selector支援下列幾種方式 1 string literals color blue 2 byte strings mybytes 0x0afc23 3 numeric values noltemsinstock 20 4 boolean lit...
activemq 使用總結
2 錯誤 channel was inactive for too long 伺服器訊息較長時間沒有訊息傳送時,客戶端會報這個錯誤 解決方法 在建立連線的uri中加入 wireformat.maxinactivityduration 0 3 採用failover方式連線導致卡死 解決方法 不採用fa...
ActiveMQ使用總結
1 activemq支援訊息過濾設定規則和用法 selector支援下列幾種方式 1 string literals color blue 2 byte strings mybytes 0x0afc23 3 numeric values noltemsinstock 20 4 boolean lit...