一、jms(java.message service):java消息服务器应用程序接口,java平台面向消息中间件的api,用于在两个应用程序之间或分布式系统中发送信息,进行异步通信。
可以进行一些异步处理。简单来说,就是应用消息的传递。
发送者和接受者。接受者从队列中获取消息,且在成功接收消息之后需向队列应答成功。发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,都不会影响消息被发送到队列。
消息队列。每个消息都被发送到一个特定的队列。队列保留着消息,直到他们被消费或超时。
每个消息只有一个消费者,一旦被消费,消息就不在消息队列中了。
二、ActiveMQ
这是当前最流行的,能力最强的开源消息队列服务,是面向消息中间件(MOM)的最终实现,是真正的服务提供者,工作模式如下:
部分解释:
1.Connection Factory :对象创建一个连接,向消息服务发送消息以及从消息服务接收消息均是通过此连接来进行。
2. Connection:客户端与消息服务的活动连接。大多数客户端均使用一个链接来进行所有的消息传送。
3. Session :一个用于生产和使用消息的单线程上下文。它用于创建发送消息的生产者和接收消息的消费者 ,并为所发送的消息定义发送顺序。
4. Message Producer:向指定的物理目标发送消息。
5. Message Consumer:客户端是使用Message Consumer从指定的目录目标接收消息。消费者可以支持同步或异步消息接收。异步使用可通过想消费者注册MessageListener来实现。
三、 JMS Point-to-Point脚本开发
这是对MQ中间件进行性能测试。
1.首先我们先去下载MQ并解压(以win为例)
2.打开ActiveMQ
在解压好的文件下有个bin目录,点开activemq.bat就可以启动成功了(万一没有启动成功就在bin目录下的win32/win64下启动activemq.bat),
启动完后在浏览器输入:http://127.0.0.1:8161/admin/ ,账号和密码都是admin
3.把解压好的文件下的activemq-all-5.16.2.jar复制一份到jmeter的lib文件下
4.创建一个jndi.properties文件
1.文件内容如下:
java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url = vm://localhost #配置链接,注意把链接改成你要填写的链接
#指定connectionFactoryNames的jndi的名字,多个名字之间可以逗号分隔。
connectionFactoryNames = connectionFactory
#注册queue,格式:
#queue.[jndiName] = [physicalName]
#使用时:(Queue)context.loockup(“jndiName”),此处是MyQueuePertest自定义命名
queue.MyQueuePertest = MyQueuePertest
#注册topic,格式:
#topic.[jndiName] = [physicalName]
topic.MyTopicPertest = MyTopicPertest
5.把这个文件要加入到jmeter启动文件的ApacheJMeter.jar
cmd命令:jar uf ApacheJMeter.jar jndi.properties\
6.启动jmeter,添加线程组 - 添加JMS点到点。
然后我们添加查看结果树,然后运行就可以了。
最后在AMQ启动服务就能看到了。(不知道为啥请求不到我的Windows已部署好的AMQ,所以没有成功截图。o(╥﹏╥)o)
MQ是起到什么作用?为什么选用MQ?
消息队列的写入和读取,来做异步处理
为什么选用MQ?为什么使用消息队列?
解耦:
将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统不需要修改
异步:
将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度
削峰:
系统A慢慢的按照数据库处理的并发量,从消息队列中拉去消息,在生成环境中短暂的高峰期积压是允许的。