ActiveMQ系列(1) - 使用入门

没网的日子真的不好过啊
  • 1.背景:
                  对于常见业务中,数据并发是一个很头疼的问题,很多时候,会出现资源共享导致线程阻塞的问题,这时候问题就来了,,,老板也尾随来了,来找你麻烦了,钱哪去了?,具体点儿,
            比如生成订单时候,多用户同时下单并支付,这都是白花花的银子啊,算错了,真的出现上面的情况了,还一个就是会遇到数据脏读问题,那么怎么解决?不以规矩不成方圆,所以,从小到大,
            老师总让我们排队,井然有序的入课堂就坐,就因为有序所以也提升了效率。ActiveMQ就做到了,列队形式,类似线程池列队,redis的push prop,当然redis更猛。
 
  • 2.系统环境:

windows 10 企业版本 64位

  • 3.获取 与 安装 :

a)     http://activemq.apache.org/ 自行选择中意版本(或 文章底部,我上传了,是目前的最新版本), 注意看域名,apache,所以肯定离不开 jdk了, jdk获取:

                      http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ,同时配置 JAVA_HOME环境
              b)    安装 ActiveMQ:
                        首先,解压下载的zip文件包,文件目录如下:
         ActiveMQ系列(1) - 使用入门
                        ActiveMQ系列(1) - 使用入门
                        bin       不用说了,和tomcat一样的,都是bat的启动或者停止的批处理和几个相关的jar包,
                        conf     顾名思义就是存放配置文件的
                        data     数据,什么数据?执行过程中生成的log等文件都在里面
                        docs    就是现在要用到的,安装以及使用:
      
  • 4 安装使用:
         doc文件夹中的 提示:
         ActiveMQ系列(1) - 使用入门                        ActiveMQ系列(1) - 使用入门
 
                          执行之后,下面的配置可以不用看了,因为部分不正确,直接在浏览器地址栏键入:Http://127.0.0.1:(端口号)8161,这时候可以看到以下界面:
         ActiveMQ系列(1) - 使用入门
                           ActiveMQ系列(1) - 使用入门
                            进行相关配置,默认用户名称和密码,上一步骤有提示,account/password ->admin/admin,显示如下界面:
          ActiveMQ系列(1) - 使用入门
                            ActiveMQ系列(1) - 使用入门
                            
                          -----其实测试过程中发现,上面的东西如果没有特殊要求,可以不用变化,就可以直接使用,这地方注意,看以下截图:
         ActiveMQ系列(1) - 使用入门
            ActiveMQ系列(1) - 使用入门
                执行 bin文件夹中的activemq.bat之后,发现执行到这个地方就不执行了,起初以为出现异常了,其实不是这个问题,可以不用理会,直接写代码即可。
 
  • 5. 参考  p2p 案例代码:
         依次引入:Apache.NMS.dll,Apache.NMS.ActiveMQ.dll即可食用。
    (案例来自,底部链接,虽然是别人的东西,但是自己动手写一遍和只看别人的东西,是不可用言语能表达的。):控制台程序:
服务端
    
namespace TestActiveMQ
{
class Program
{
private static IConnectionFactory factory //需要引用 Apache.NMS;
= new ConnectionFactory("tcp://localhost:61616");//需要引用Apache.NMS.ActiveMQ; static void Main(string[] args)
{
//建立连接
using (IConnection connection = factory.CreateConnection())
{
//通过连接创建session会话
using (ISession session = connection.CreateSession())
{
//通过会话创建生产者,方法里面new出来的是MQ中的Queue
IMessageProducer producer = session.CreateProducer(new Apache.NMS.ActiveMQ.Commands.ActiveMQQueue("firstQueue"));
//创建一个发送的消息对象
ITextMessage message = producer.CreateTextMessage(); //给这个对象赋实际的消息
message.Text = "";
//设置消息对象的属性,这个很重要哦,是Queue的过滤条件,也是P2P消息的唯一指定属性
message.Properties.SetString("filter", "demo");
//生产者把消息发送出去,几个枚举参数MsgDeliveryMode是否长链,MsgPriority消息优先级别,发送最小单位,当然还有其他重载
producer.Send(message, MsgDeliveryMode.NonPersistent, MsgPriority.Normal, TimeSpan.MinValue); Console.WriteLine("发送成功!");
Console.ReadLine();
}
} }
}
}

客户端:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitConsumer();
} public void InitConsumer()
{
//创建连接工厂
IConnectionFactory factory = new ConnectionFactory("tcp://localhost:61616");
//通过工厂构建连接
IConnection connection = factory.CreateConnection();
//这个是连接的客户端名称标识
connection.ClientId = "firstQueueListener";
//启动连接,监听的话要主动启动连接
connection.Start();
//通过连接创建一个会话
ISession session = connection.CreateSession();
//通过会话创建一个消费者,这里就是Queue这种会话类型的监听参数设置
IMessageConsumer consumer = session.CreateConsumer(new Apache.NMS.ActiveMQ.Commands.ActiveMQQueue("firstQueue"), "filter='demo'");
//注册监听事件
consumer.Listener += new MessageListener(consumer_Listener);
//connection.Stop();
//connection.Close(); } void consumer_Listener(IMessage message)
{
ITextMessage msg = (ITextMessage)message;
//异步调用下,否则无法回归主线程
tbReceiveMessage.Invoke(new DelegateRevMessage(RevMessage), msg); } public delegate void DelegateRevMessage(ITextMessage message); public void RevMessage(ITextMessage message)
{
tbReceiveMessage.Text += string.Format(@"接收到:{0}{1}", message.Text, Environment.NewLine);
} }

执行结果:

ActiveMQ系列(1) - 使用入门

    
 
 
 
上一篇:Python爬虫-Fiddle


下一篇:MySQL-ALTER TABLE命令学习[20180503]