1. c語言能讀取apache activeMQ隊列數據嗎請說的具體點
可以的,參見apache的網站。
2. C#怎麼監聽ActiveMq連接異常
JMS 程序的最終目的是生產和消費的消息能被其他程序使用,JMS 的 Message 是一個既簡單又不乏靈活性的基本格式,允許創建不同平台上符合非JMS 程序格式的消息。
Message 由消息頭,屬性和消息體三部份組成。
Active MQ支持過濾機制,即生產者可以設置消息的屬性(Properties),該屬性與消費者端的Selector對應,只有消費者設置的selector與消息的Properties匹配,消息才會發給該消費者。Topic和Queue都支持Selector。
示例代碼
[csharp] view plain print?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Apache.NMS;
using System.Diagnostics;
using Apache.NMS.Util;
using System.Windows.Threading;
/*
* 功能描述:C#使用ActiveMQ示例
* 修改次數:2
* 最後更新: by Kagula,2012-07-31
*
* 前提條件:
* [1]apache-activemq-5.4.2
* [2]Apache.NMS.ActiveMQ-1.5.6-bin
* [3]WinXP SP3
* [4]VS2008 SP1
* [5]WPF工程 With .NET Framework 3.5
*
* 啟動
*
* 不帶安全控制方式啟動
* [你的解壓路徑]\apache-activemq-5.4.2\bin\activemq.bat
*
* 安全方式啟動
* 添加環境變數: ACTIVEMQ_ENCRYPTION_PASSWORD=activemq
* [你的解壓路徑]\apache-activemq-5.4.2\bin>activemq xbean:file:../conf/activemq-security.xml
*
* Active MQ 管理地址
* http://127.0.0.1:8161/admin/
* 添加訪問"http://127.0.0.1:8161/admin/"的限制
*
* 第一步:添加訪問限制
* 修改D:\apache\apache-activemq-5.4.2\conf\jetty.xml文件
* 下面這行編碼,原
* <property name="authenticate" value="true" />
* 修改為
* <property name="authenticate" value="false" />
*
* 第二步:修改登錄用戶名密碼,預設分別為admin,admin
* D:\apache\apache-activemq-5.4.2\conf\jetty-realm.properties
*
* 用戶管理(前提:以安全方式啟動ActiveMQ)
*
* 在[你的解壓路徑]\apache-activemq-5.4.2\conf\credentials.properties文件中修改默認的用戶名密碼
* 在[你的解壓路徑]\apache-activemq-5.4.2\conf\activemq-security.xml文件中可以添加新的用戶名
* e.g. 添加oa用戶,密碼同用戶名。
* <authenticationUser username="oa" password="oa" groups="users,admins"/>
*
* 在[你的解壓路徑]\apache-activemq-5.4.2\conf\activemq-security.xml文件中你還可以設置指定的Topic或Queue
* 只能被哪些用戶組read 或 write。
*
*
* 配置C# with WPF項目
* 項目的[Application]->[TargetFramework]屬性設置為[.NETFramework 3.5](這是VS2008WPF工程的默認設置)
* 添加[你的解壓路徑]\Apache.NMS.ActiveMQ-1.5.6-bin\lib\Apache.NMS\net-3.5\Apache.NMS.dll的引用
* Apache.NMS.dll相當於介面
*
* 如果是以Debug方式調試
* 把[你的解壓路徑]\Apache.NMS.ActiveMQ-1.5.6-bin\build\net-3.5\debug\目錄下的
* Apache.NMS.ActiveMQ.dll文件復制到你項目的Debug目錄下
* Apache.NMS.ActiveMQ.dll相當於實現
*
* 如果是以Release方式調試
* 參考上文,去取Apache.NMS,Release目錄下相應的DLL文件,並復制到你項目的Release目錄下。
*
*
* 參考資料
* [1]《C#調用ActiveMQ官方示例》 http://activemq.apache.org/nms/examples.html
* [2]《ActiveMQ NMS下載地址》http://activemq.apache.org/nms/activemq-downloads.html
* [3]《Active MQ在C#中的應用》http://www.cnblogs.com/guthing/archive/2010/06/17/1759333.html
* [4]《NMS API Reference》http://activemq.apache.org/nms/nms-api.html
*/
namespace testActiveMQSubscriber
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
private static IConnectionFactory connFac;
private static IConnection connection;
private static ISession session;
private static IDestination destination;
private static IMessageProcer procer;
private static IMessageConsumer consumer;
protected static ITextMessage message = null;
public Window1()
{
InitializeComponent();
initAMQ("MyFirstTopic");
}
private void initAMQ(String strTopicName)
{
try
{
connFac = new NMSConnectionFactory(new Uri("activemq:failover:(tcp://localhost:61616)"));
//新建連接
//connection = connFac.CreateConnection("oa","oa");//設置連接要用的用戶名、密碼
//如果你要持久「訂閱」,則需要設置ClientId,這樣程序運行當中被停止,恢復運行時,能拿到沒接收到的消息!
connection.ClientId = "testing listener";
connection = connFac.CreateConnection();//如果你是預設方式啟動Active MQ服務,則不需填用戶名、密碼
//創建Session
session = connection.CreateSession();
//發布/訂閱模式,適合一對多的情況
destination = SessionUtil.GetDestination(session, "topic://" + strTopicName);
//新建生產者對象
procer = session.CreateProcer(destination);
procer.DeliveryMode = MsgDeliveryMode.NonPersistent;//ActiveMQ伺服器停止工作後,消息不再保留
3. 啟動activeMQ報錯,每次重啟電腦好幾次才能啟動MQ,該怎麼解決
ActiveMQ 安裝windwos服務不能啟動問題
一.AcitveMQ windwos 服務
1.安裝目錄下新建 temp文件夾
2.安裝目錄下\bin\win32\wrapper.conf指定java.io.tempdir目錄
wrapper.java.additional.10=-Djava.io.tmpdir="%ACTIVEMQ_HOME%/temp"
# ------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding right ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a of the License at
#
#
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ------------------------------------
#********************************************************************
# Wrapper Properties
#********************************************************************
#wrapper.debug=TRUE
set.default.ACTIVEMQ_HOME=../..
set.default.ACTIVEMQ_BASE=../..
wrapper.working.dir=.
# Java Application
wrapper.java.command=java
# Java Main class. This class must implement the WrapperListener interface
# or guarantee that the WrapperManager class is initialized. Helper
# classes are provided to do this for you. See the Integration section
# of the documentation for details.
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
# Java Classpath (include wrapper.jar) Add class path elements as
# needed starting from 1
wrapper.java.classpath.1=%ACTIVEMQ_HOME%/bin/wrapper.jar
wrapper.java.classpath.2=%ACTIVEMQ_HOME%/bin/run.jar
# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=%ACTIVEMQ_HOME%/bin/win32
# Java Additional Parameters
# note that n is the parameter number starting from 1.
wrapper.java.additional.1=-Dactivemq.home="%ACTIVEMQ_HOME%"
wrapper.java.additional.2=-Dactivemq.base="%ACTIVEMQ_BASE%"
wrapper.java.additional.3=-Djavax.net.ssl.keyStorePassword=password
wrapper.java.additional.4=-Djavax.net.ssl.trustStorePassword=password
wrapper.java.additional.5=-Djavax.net.ssl.keyStore="%ACTIVEMQ_BASE%/conf/broker.ks"
wrapper.java.additional.6=-Djavax.net.ssl.trustStore="%ACTIVEMQ_BASE%/conf/broker.ts"
wrapper.java.additional.7=-Dcom.sun.management.jmxremote
wrapper.java.additional.8=-Dorg.apache.activemq.UseDedicatedTaskRunner=true
wrapper.java.additional.9=-Djava.util.logging.config.file=logging.properties
wrapper.java.additional.10=-Djava.io.tmpdir="%ACTIVEMQ_HOME%/temp"
# Uncomment to enable remote jmx
#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.port=1616
#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.authenticate=false
#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.ssl=false
# Uncomment to enable YourKit profiling
#wrapper.java.additional.n=-Xrunyjpagent
# Uncomment to enable remote debugging
#wrapper.java.additional.n=-Xdebug -Xnoagent -Djava.compiler=NONE
#wrapper.java.additional.n=-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=3
# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=512
# Application parameters. Add parameters as needed starting from 1
wrapper.app.parameter.1=org.apache.activemq.console.Main
wrapper.app.parameter.2=start
#********************************************************************
# Wrapper Logging Properties
#********************************************************************
# Format of output for the console. (See docs for formats)
wrapper.console.format=PM
# Log Level for console output. (See docs for log levels)
wrapper.console.loglevel=INFO
# Log file to use for wrapper output logging.
wrapper.logfile=%ACTIVEMQ_BASE%/data/wrapper.log
# Format of output for the log file. (See docs for formats)
wrapper.logfile.format=LPTM
# Log Level for log file output. (See docs for log levels)
wrapper.logfile.loglevel=INFO
# Maximum size that the log file will be allowed to grow to before
# the log is rolled. Size is specified in bytes. The default value
# of 0, disables log rolling. May abbreviate with the 'k' (kb) or
# 'm' (mb) suffix. For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=0
# Maximum number of rolled log files which will be allowed before old
# files are deleted. The default value of 0 implies no limit.
wrapper.logfile.maxfiles=0
# Log Level for sys/event log output. (See docs for log levels)
wrapper.syslog.loglevel=NONE
#********************************************************************
# Wrapper Windows Properties
#********************************************************************
# Title to use when running as a console
wrapper.console.title=ActiveMQ
#********************************************************************
# Wrapper Windows NT/2000/XP Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
# using this configuration file has been installed as a service.
# Please uninstall the service before modifying this section. The
# service can then be reinstalled.
# Name of the service
wrapper.ntservice.name=ActiveMQ
# Display name of the service
wrapper.ntservice.displayname=ActiveMQ
# Description of the service
wrapper.ntservice.description=ActiveMQ Broker
# Service dependencies. Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=
# Mode in which the service is installed. AUTO_START or DEMAND_START
wrapper.ntservice.starttype=AUTO_START
# Allow the service to interact with the desktop.
wrapper.ntservice.interactive=false
4.出現如下錯誤 Unable to execute Java command. 系統找不到指定的文件。 (0x2)
5.指定Java安裝路徑
wrapper.java.command=C:/Program Files/Java/jdk1.7.0_25/bin/java
# ------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding right ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a of the License at
#
#
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ------------------------------------
#********************************************************************
# Wrapper Properties
#********************************************************************
# wrapper.debug=TRUE
set.default.ACTIVEMQ_HOME=../..
set.default.ACTIVEMQ_BASE=../..
wrapper.working.dir=.
# Java Application
wrapper.java.command=C:/Program Files/Java/jdk1.7.0_25/bin/java
# Java Main class. This class must implement the WrapperListener interface
# or guarantee that the WrapperManager class is initialized. Helper
# classes are provided to do this for you. See the Integration section
# of the documentation for details.
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
# Java Classpath (include wrapper.jar) Add class path elements as
# needed starting from 1
wrapper.java.classpath.1=%ACTIVEMQ_HOME%/bin/wrapper.jar
wrapper.java.classpath.2=%ACTIVEMQ_HOME%/bin/run.jar
# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=%ACTIVEMQ_HOME%/bin/win32
# Java Additional Parameters
# note that n is the parameter number starting from 1.
wrapper.java.additional.1=-Dactivemq.home="%ACTIVEMQ_HOME%"
wrapper.java.additional.2=-Dactivemq.base="%ACTIVEMQ_BASE%"
wrapper.java.additional.3=-Djavax.net.ssl.keyStorePassword=password
wrapper.java.additional.4=-Djavax.net.ssl.trustStorePassword=password
wrapper.java.additional.5=-Djavax.net.ssl.keyStore="%ACTIVEMQ_BASE%/conf/broker.ks"
wrapper.java.additional.6=-Djavax.net.ssl.trustStore="%ACTIVEMQ_BASE%/conf/broker.ts"
wrapper.java.additional.7=-Dcom.sun.management.jmxremote
wrapper.java.additional.8=-Dorg.apache.activemq.UseDedicatedTaskRunner=true
wrapper.java.additional.9=-Djava.util.logging.config.file=logging.properties
wrapper.java.additional.10=-Djava.io.tmpdir="%ACTIVEMQ_HOME%/temp"
# Uncomment to enable remote jmx
#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.port=1616
#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.authenticate=false
#wrapper.java.additional.n=-Dcom.sun.management.jmxremote.ssl=false
# Uncomment to enable YourKit profiling
#wrapper.java.additional.n=-Xrunyjpagent
# Uncomment to enable remote debugging
#wrapper.java.additional.n=-Xdebug -Xnoagent -Djava.compiler=NONE
#wrapper.java.additional.n=-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
# Initial Java Heap Size (in MB)
#wrapper.java.initmemory=3
# Maximum Java Heap Size (in MB)
4. 如何學習activemq
1)普通啟動
cd /home/manorage/ apache-activemq-5.3.0
bin/ activemq
(2).指定日誌文件的啟動方式
bin/activemq >tmp/smlog 2>&1 &
(3)後台啟動方式
nohup bin/activemq >tmp/smlog 2>&1 &
這里需要注意:前兩種啟動方式在linix命令行或者通過ssh客戶端啟動時在關閉對應的窗口時activemq會關閉,甚至直接輸入ctrl+c也會導致activemq退出;第三種則不會出現這中情況。
5. mq 能用於c編程么
PCF就支持C呀!
MQ還提供了系統管理的編程介面,通過該介面用戶可以編寫應用程序從而進行自動化的實時監控及管理。MQ的系統管理介面有兩種,即Programmable Command Format(可編程命令格式,簡稱PCF)和MQ Administration Interface(MQ管理介面,簡稱MQAI)。
關於WebSphere MQ 可編程命令格式(PCF)
WebSphere MQ 可編程命令格式(PCF)命令使得管理任務能編寫到應用程序中,在程序中可以創建隊列、進程等對象的定義以及更改對象的屬性等。
PCF定義了命令和回復消息,應用程序通過這些命令和回復消息實現和隊列管理器之間的信息交換,PCF 命令和MQSC 命令具有相同的命令集,所有通過MQSC命令能夠實現的功能,通過PCF都可以實現,因此,通過WebSphere MQ的應用程序可以實現對MQ對象的管理包括:隊列管理器,進程定義,隊列和通道等。PCF命令可以被發送到本地隊列管理器的命令隊列,也可以被發送到某個遠程隊列管理器的命令隊列,因此,應用程序可以通過一個本地隊列管理器集中管理網路中的任何本地和遠程管理器。
MQ的遠程管理機制底層就是通過PCF這種方式的,在互相聯接的系統中的任意一個節點都可以進行對其他所有節點的配置和管理,這種情形的典型應用就是通過一台Windows操作系統的機器來管理全網的MQ節點。由於MQ在Windows XP/NT/2000平台上提供了圖形界面的管理工具,我們可以把一個節點設成管理機,利用管理機可以監控和配置網路中的任一節點,監測和顯示整個網路中任何一個節點上的伺服器及其各種對象的狀態和運行情況,從而實現對中間件的集中管理和監控。
每一個隊列管理器有一個名為SYSTEM.ADMIN.COMMAND.QUEUE的管理隊列,應用程序可以按照PCF命令消息格式封裝的要求,組成PCF消息,並將該PCF命令消息發送到管理隊列中,同時,每一個隊列管理器也有一個命令伺服器(Command Server),它為管理隊列中的消息提供服務,在我們使用MQ的控制命令strmqcsv啟動命令伺服器之後,它將監控管理隊列,一旦該隊列中有PCF消息到達,它將讀取該消息,並解釋執行。因此在網路中的任何隊列管理器都可以處理PCF消息,通過使用指定的回復隊列,回復消息可以被返回給應用程序,應用程序可以獲知PCF命令執行成功與否。回復隊列由命令消息的消息描述符(MQMD)中的ReplyToQ和ReplyToQMgr兩個欄位來指定。
PCF命令和回復消息是使用MQ相應的編程介面進行發送和接收的,以C語言為例,我們只需要使用MQPUT將PCF命令消息發送到相應的管理隊列,使用MQGET將PCF回復消息從相應的回復隊列中取出即可。這里的關鍵就是如何封裝PCF消息。每個MQ指令及其相關參數都是一條單獨的命令消息,每個命令消息由PCF頭和若干個參數結構塊組成,每個參數結構塊提供了命令的參數。回復消息的結構與命令消息相同,但是回復消息的個數根據不同的情況可能會有多個,例如:如果我們查詢某個隊列管理器下所有本地隊列的屬性,假設本地隊列有10個,那麼我們將得到10個回復消息,PCF頭中的Control欄位MQCFC_NOT_LAST和MQCFC_LAST將用於區分是否為最後一個回復消息。
PCF編程介面支持C,Visual Basic, COBOL, RPG, PL/1和Java等,其中在我們最常用的編程語言中,C和Visual Basic編程在PCF的封裝上相對Java將會略微復雜一些
6. 請用白話講解ActiveMQ的用途
用途就是用來處理消息,也就是處理JMS的。消息隊列在大型電子商務類網站,如京東、淘寶、去哪兒等網站有著深入的應用,隊列的主要作用是消除高並發訪問高峰,加快網站的響應速度。
在不使用消息隊列的情況下,用戶的請求數據直接寫入資料庫,高發的情況下,會對資料庫造成巨大的壓力,同時也使得系統響應延遲加劇,但使用隊列後,用戶的請求發給隊列後立即返回。
例如:不能直接給用戶提示訂單提交成功,京東上提示:「您提交了訂單,請等待系統確認」再由消息隊列的消費者進程從消息隊列中獲取數據,非同步寫入資料庫。
由於消息隊列的服務處理速度遠快於資料庫,因此用戶的響應延遲可得到有效改善。
(6)c語言activemq客戶端擴展閱讀:
ActiveMQ主要有以下幾種使用場景
1、非同步調用。
2、一對多通信。
3、做多個系統的集成、同構、異構。
4、作為RPC的替代。
5、多個應用相互解耦。
6、作為事件驅動架構的幕後支撐。
7、為了提高系統的可伸縮性。
7. 如果在程序中查看ActiveMQ中消費者是否在線
如果是C/S的結構,你的服務端和客戶端應該是Socket連接,可以利用心跳來保持服務端和客戶端的連接,已確定客戶端是否存在
8. 消息隊列(mq)是什麼
是生產者先將消息投遞一個叫隊列的容器中,然後再從這個容器中取出消息,最後再轉發給消費者。
消息隊列是 Microsoft 的消息處理技術,它在任何安裝 Microsoft Windows 的計算機組合中,為任何應用程序提供消息處理和消息隊列功能,無論這些計算機是否在同一個網路上或者是否同時聯機。
消息隊列網路是能夠相互間來回發送消息的任何一組計算機。網路中的不同計算機在確保消息順利處理的過程中扮演不同的角色。它們中有些提供路由信息以確定如何發送消息,有些保存整個網路的重要信息,而有些只是發送和接收消息。
消息隊列的類型介紹:
消息隊列目前主要有兩種類型:POSIX消息隊列以及系統V消息隊列,系統V消息隊列目前被大量使用。每個消息隊列都有一個隊列頭,用結構struct msg_queue來描述。隊列頭中包含了該消息隊列的大量信息。包括消息隊列鍵值、用戶ID、組ID、消息隊列中消息數目等等。
消息隊列就是一個消息的鏈表,可以把消息看作一個記錄,具有特定的格式以及特定的優先順序。對消息隊列有寫許可權的進程可以向消息隊列中按照一定的規則添加新消息;對消息隊列有讀許可權的進程則可以從消息隊列中讀走消息。消息隊列是隨內核持續的。
9. 如何用C調用activemq通信
我有一次在MQ的官方網站上找東西的時候看到有C++調用MQ的說明,你去官方網站上看看
10. 用ActiveMQ實現聊天單了還有群聊實現的思路
A、B、C會有一個唯一的ID比如A是1,B是2,C是3,簡單的,假如A發消息給B,有兩種可能,B不在線和B在線,情況1:B會提前跟A說,我的編號是2,有消息直接給我:或者有消息的話,先幫我留著,我回來再給我。復雜的:群聊:房間的每個人都各自報自己的編號,根據他們分配一個組,不管在哪個組,大家都很熟,直接發消息對號入座,假如A、B、C是一個組,那麼久把這個組的人假如到一個List集合群裡面,後者來一個就add一個,走一個就remove一個。List集合群就放groupId,和一個Map成員對象,假如A發消息,那麼閑遍歷A在哪個groupId組裡面,然後根據組遍歷,組裡面的所有人。然後開始叫B、C。如果B、C不回答,那麼久是離線狀態,activeMQ有個叫訂閱的,下次那個不在的,上來,就會直接下達消息給他。我沒用過,但我最近也要用上群聊,我的大致想法是這樣