C#(.net)实现用apache activemq传递SQLite的数据
版权声明:本文为搜集借鉴各类文章的原创文章,转载请注明出处:http://www.cnblogs.com/2186009311CFF/p/6382623.html。
C#(.net)实现用apache activemq传递SQLite的数据:
本测试适用于Windows32位,VS2010的.net 4.0框架。
一、C#连接SQLite:
对于C#连接SQLite的内容,请查看我的另一篇随笔:http://www.cnblogs.com/2186009311CFF/p/6270467.html(从“二、后台与SQLite数据库连接:”开始看),不同之处如下:
1、那篇文章的连接方式是B/S下的连接数据库方式,但在C/S下有所不同,具体如下:
注意:这两种方法,都需要自己把数据库文件拷贝至相应文件夹,只是放的位置不同:绝对路径在固定的目录,相对路径在安装目录下
1)用绝对路径:
static readonly static string strconn= "Data Source=C:/DB/Test.db";
2)用相对路径:
private readonly static string strconn = "Data Source="+Application.StartupPath+"../Test.db;Version=3;";
如果提示错误“attempt to write a readonly database”,则需数据库文件所在文件夹(即C:/DB或安装目录)的文件夹权限(属性——>安全……)
2、那篇文章的ashx文件内容与C/S下的类似,只是在C/S下,我用cs文件替代了ashx文件,主要内容如下:
查询的:
public static DataTable GetDataTable(string strSQL)//"Select * From ProductionCycleData"
{
DataTable dt = new DataTable();
DataSet ds = new DataSet();
using (SQLiteConnection conn = new SQLiteConnection(strconn))
{
//创建sqlite命令
using (SQLiteCommand comm = conn.CreateCommand())
{
//打开数据库链接
conn.Open();
//select数据分页用limit就行,很方便
comm.CommandText = strSQL;
using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(comm))
{
adapter.SelectCommand = comm;
adapter.Fill(ds);
}
// DataTable dt = new DataTable();
dt = ds.Tables[0];
}
}
return dt;
}
修改(@"UPDATE ProductionCycleData SET PDOCode = '盗贼' WHERE ShotType = 604610"),
删除(@"DELETE FROM ProductionCycleData"),
添加(@"INSERT INTO ProductionCycleData VALUES (1,"abc")")
public static void ExecuteSQLiteCommandSQL(string strSQL)
{
using (SQLiteConnection con = new SQLiteConnection(SQLiteHelper.strconn))
{
con.Open();
using (SQLiteCommand cmd = new SQLiteCommand(strSQL, con))
{
cmd.ExecuteNonQuery();
}
}
}
可参考: http://www.cnblogs.com/teroy/p/3960760.html
其实我测试时有小插曲,我用相当于bin目录的相对路径:private readonly static string strconn = "Data Source=../../..//DB/Test.db;Version=3;";调试是可以查询和删除成功的,但是安装后就不成功了,应该是安装后找不到路径了,具体我也不清楚。
二、用Apache ActiveMQ传递信息
1、首先具备java环境,去Oracle官网下载适合本电脑的JDK或者JRE安装,下载链接: http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html#javasejdk (不知以后会不会失效,总之去官网找吧,现在是免费的)
2、去Apache ActiveMQ官网下载文件
源文件: http://activemq.apache.org/activemq-5143-release.html
运行解压后的apache-activemq-5.14.3-bin\apache-activemq-5.14.3\bin\win32\activemq.bat文件(我的测试电脑是32位,故选择Win32下的bat文件运行),出现如图所示,则表明Apache ActiveMQ可以发送和接收数据了

.net下所需的dll,我用到的是Sub Projects下的NMS:http://www.apache.org/dyn/closer.lua/activemq/apache-nms/1.7.0/Apache.NMS.ActiveMQ-1.7.2-bin.zip
引用解压文件里的.net 4.0下的Apache.NMS、Apache.NMS.ActiveMQ、Ionic.Zlib的dll
3、前期准备:
监控队列发送信息情况:打开浏览器输入 http://localhost:8161/admin/ ,用账户:admin和密码:admin登录。这是默认的,可在前面“1、”中的解压文件conf文件夹下的jetty.xml和jetty-realm.properties中,进行相应的更改,步骤如下:
1)jetty.xml中true变false;

2)jetty-realm.properties中,按用户名:密码,角色的顺序排列,按照所需进行更改保存

可参考:http://blog.csdn.net/stevenprime/article/details/7091224
成功登录后,呈现界面:

点击Queues,如若有信息发送成功,则会显示,如图所示:

若需查看具体发送的内容,则只需点击对应的Queues Name(如test):

出现:

点击对应的Message ID,出现该信息名的详细发送内容(往下翻):

4、C#控制,发送信息给Apache ActiveMQ
可参考:http://www.cnblogs.com/woxpp/p/5001373.html(这个真的很好)、http://blog.csdn.net/proglovercn/article/details/51592884(这个也不错)
1)查看“1、”下的解压文件conf目录下的文件:
credentials.properties文件,查看activemq.username、activemq.password

activemq.xml文件,查看串口号

2)C#代码,发送信息
private static string strActivemMQusername = "system";
private static string strActivemMQpassword = "manager";
private static string strPort = "61616";
public static void SendMessage(string strSendQueueName, string strSendIP, string strSendMessage)
{
String QueuesNameESF = "queue://" + strSendQueueName;
Uri _uri = new Uri(String.Concat("activemq:tcp://" + strSendIP + ":" + strPort));
IConnectionFactory factory = new ConnectionFactory(_uri);
using (IConnection conn = factory.CreateConnection(strActivemMQusername, strActivemMQpassword))
{
using (ISession session = conn.CreateSession())
{
IDestination destination = SessionUtil.GetDestination(session, QueuesNameESF);
using (IMessageProducer producer = session.CreateProducer(destination))
{
conn.Start();
//可以写入字符串,也可以是一个xml字符串等
ITextMessage request = session.CreateTextMessage(strSendMessage);
producer.Send(request); }
}
}
}
运行过后,可在http://localhost:8161/admin/查看信息发送情况。
参考:http://www.cnblogs.com/diorlv/p/3328712.html 、http://www.cnblogs.com/madyina/p/4121458.html
3)接收Apache ActiveMQ的消息:
public static void ReceMessage(string strReceQueueName, string strReceIP, ref DataTable dtReceMessage)
{ String QueuesNameESF = "queue://" + strReceQueueName;
Uri _uri = new Uri(String.Concat("activemq:tcp://" + strReceIP + ":" + strPort + "?wireFormat.maxInactivityDuration=0"));
IConnectionFactory factory = new ConnectionFactory(_uri);
using (IConnection conn = factory.CreateConnection(strActivemMQusername, strActivemMQpassword))
{
using (ISession session = conn.CreateSession())
{
conn.Start();
IDestination destination = SessionUtil.GetDestination(session, QueuesNameESF);
using (IMessageConsumer consumer = session.CreateConsumer(destination))
{
ITextMessage message = consumer.Receive() as ITextMessage; string strReceMessage = message.Text;
dtReceMessage = XMLHelper.HuaGeConvertXmlToDataTable(strReceMessage); }
}
}
}
此处接收XML文件字符串,并把其转化成DateTable形式接收。
但以上的接收和发送有不足,发送是同一消息名接收多多信息,但接收只能接收同一消息名的第一条信息,这种是不适用实际情况的,我还在考虑如何删除,静待完善。。。呵呵。
本人处于初期探索阶段,对于消息是否发送成功的判断,和一对多,多对一的处理,还有程序删除队列消息等问题,有待学习,希望这些能够帮助到你。
如有不足之处,请谅解,并留言,谢谢!
C#(.net)实现用apache activemq传递SQLite的数据的更多相关文章
- apache activemq 学习笔记
0.activemq的概念 activemq实现了jms(java Message server),用于接收,发送,处理消息的开源消息总线. 1.activemq和jms的区别 jms说白了就是jav ...
- Apache ActiveMQ实战(1)-基本安装配置与消息类型
ActiveMQ简介 ActiveMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信.ActiveMQ使用Apache ...
- 消息队列MQ - Apache ActiveMQ
Apache ActiveMQ是Apache软件基金会所研发的开放源码消息中间件:由于ActiveMQ是一个纯Jave程式,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行. 1.que ...
- Apache ActiveMQの版本更迭和Apache ActiveMQの故障转移
本文描述apache activemq 版本更迭的原因以及Apache ActiveMQのThe Failover Transport new features in 5.2.0 1.对信息的传输/ ...
- apache activemq的重连
1.activemq的重连机制 maxReconnectAttempts -1 | 0 From version 5.6 onwards: -1 is default and means retry ...
- How to Setup Replicated LevelDB Persistence in Apache ActiveMQ 5.9--转载
原文地址:https://simplesassim.wordpress.com/2013/11/03/how-to-setup-replicated-leveldb-persistence-in-ap ...
- Apache ActiveMQ消息中间件的基本使用
Apache ActiveMQ是Apache软件基金会所研发的开放源码消息中间件:由于ActiveMQ是一个纯Java程式,因此只需要操作系统支援Java虚拟机,ActiveMQ便可执行. 支持Jav ...
- Apache ActiveMQ实战(2)-集群
ActiveMQ的集群 内嵌代理所引发的问题: 消息过载 管理混乱 如何解决这些问题--集群的两种方式: Master slave Broker clusters ActiveMQ的集群有两种方式: ...
- Linux下apache activemq的安装与配置
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范 的 JMS Provider实现,尽管JMS规范出台已经是很 ...
随机推荐
- C# 无焦点获取扫码枪扫码信息
代码网上有的是,多是需要窗体焦点直接show出扫码信息(usb,模拟键盘,hook) 怎样才能真的无焦点获取? 用串口方式 usb转串口 以接收串口通讯消息的方式获取扫码信息
- 查询oracle中所有用户信息 禁用用户
----查询oracle中所有用户信息 ----1.查询数据库中的表空间名称 ----1)查询所有表空间 select tablespace_name from dba_tablespaces; se ...
- 关于Laravel Gate 和 Policies 的理解
他们的关系是什么? Gate 派生出 Policies 原因见:Providers/AuthServiceProvider.php 文件 其中有注册policies方法: public functio ...
- 卷积神经网络应用于MNIST数据集分类
先贴代码 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = inpu ...
- xmake入门,构建项目原来可以如此简单
前言 在开发xmake之前,我一直在使用gnumake/makefile来维护个人C/C++项目,一开始还好,然而等项目越来越庞大后,维护起来就非常吃力了,后续也用过一阵子automake系列工具,并 ...
- JDK8中接口的新特性
在JDK8环境中,接口中的方法不再是只能有抽象方法,还可以有静态方法和default方法.实现类只需要实现它的抽象方法即可,JDK8中的接口有愈发向抽象类靠拢的感觉. 关于静态方法和默认方法作如下简述 ...
- SQL查询结果列拼接成逗号分隔的字符串:group_concat
转自:SQL查询结果列拼接成逗号分隔的字符串 背景:做SQL查询时会经常需要,把查询的结果拼接成一个字符串. 解决方法: 通过 group_concat 函数 拼接的结果很长,导致拼接结果显示不全,可 ...
- [LeetCode] 210. 课程表 II
题目链接:https://leetcode-cn.com/problems/course-schedule-ii/ 题目描述: 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前 ...
- linux的mv、cp 命令
用mv命令1.作用mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中.该命令等同于DOS系统下的ren和move命令的组合.它的使用权限是所有用户.2.格式mv [options] 源文件或 ...
- 通过编写串口助手工具学习MFC过程——(八)遇到的一些问题
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...