JSM

news/2024/12/1 0:34:07/

JSM学习笔记(只是为了记录just for 随记)

一、jsm:(java message service )java 消息服务,用于两个应用程序之间或者分布式系统之间进行消息的异步收发,是一个与具体平台无关的API,类似于JDBC(java database connectivity)。

二、点对点模型(pint to point)和发布订阅模型(publish/subscribe)
点对点模型:
这里写图片描述

发布订阅模型:
这里写图片描述

三、point to point 点对点消息模型特点:每条消息只能被一个消费者消费,当消费者消费消息之后需要向消息队列做应答即收到了消息这样这条消息就会在队列中消失,别的消费者就不能再消费这条消息了;publish/subscribe发布订阅的特点:每条消费者可以有多个消费者,即每条消息可以被多个消费者订阅;

四、消费消息的方式:
(同步消费):订阅者或者消费者调用receive方法来接收消息,receive方法在接收到消息之前将一直是阻塞的;
(异步消费):订阅者或者消费者注册一个消息监听器,当消息到达之后系统自动调用监听器的onmessage方法;

应用程序A将消息发送到服务器,然后应用程序B从服务中获取消息。
这里写图片描述

五、开始进行demo之路:
1、消息中间件activeMQ(MQ:MessageQueue 消息队列)的安装,下载zip解压即可
消息中间件的用途和特点:
1、建立网络通道,消息的可靠传输(不重复不丢失),实现跨平台。
activeMQ下载官方地址:http://activemq.apache.org/
我下载的activeMQ版本是5.15.2

这里写图片描述

目录的:
bin 存放脚本文件
conf 存放基本配置文件
data 存放的是日志文件
docs 存放说明文档
examples 存放简单的实例
lib 存放activeMQ所需的jar包
webapps 存放项目的目录
activemq-all-5.15.2.jar是在项目中用到activemq的时候直接将这个jar包导入就可以了

2、启动activeMQ
打开bin目录下可以看到有win32 和win64 两个文件夹,根据你电脑的操作系统来选择,打开文件夹,双击 activemq.bat
这里写图片描述

图中有我们activemq的按装地址 和浏览器访问的地址localhost:8191 账号:admin 密码:admin

activeMQ的tcp连接端口是61616 可以在dows命令行的执行netstat -ano|findstr “61616”看是都启动成功

这里写图片描述

在浏览器输入localhost :8161 点击broker输入用户名和密码看到下面皆可以了

这里写图片描述

3、一个简单point to point 的activeMQ 的demo

使用eclipse建立一个java项目:在项目中导入activeMQ的依赖包在我们下在的activeMQ解压包里可以找到
这里写图片描述

JSMProducer.java

package com.zrr.activemq;import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.camel.component.ActiveMQComponent;/*** 生产者(发送消息)* @author Admin**/
public class JSMProducer {//默认连接用户名private  static final String userName=ActiveMQConnection.DEFAULT_USER;//默认连接密码private static final String password = ActiveMQConnection.DEFAULT_PASSWORD;//默认连接地址private static final String brokerUrl = ActiveMQConnection.DEFAULT_BROKER_URL;//发送消息数量private static final int sendNum = 5;public static void main(String[] args){//连接工厂ConnectionFactory connectionFactory;//连接Connection connection = null;//会话 消息发送或者接收的线程Session session;//消息的目的地Destination destination;//消息生产者MessageProducer messageProducer;//实例化连接工厂connectionFactory = new  ActiveMQConnectionFactory(userName, password, brokerUrl);try{//通过连接工厂获取连接connection = connectionFactory.createConnection();//启动连接connection.start();//创建sessionsession = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);//创建一个名为HelloWorld的消息列队destination = session.createQueue("point_demo");//消息生产者messageProducer = session.createProducer(destination);//发送消息sendMessage(session,messageProducer);//session.commit();}catch(Exception e){e.printStackTrace();}finally{if(connection !=null){try {connection.close();} catch (JMSException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}/*** 发送消息* @param session* @param messageProducer 消息生产者* @throws JMSException */public static void sendMessage(Session session,MessageProducer messageProducer) throws JMSException{for(int i=0 ;i<sendNum;i++){//创建一条文本信息TextMessage message = session.createTextMessage("ActiveMQ 生产者发送消息"+i);//打印生产者发送的消息System.out.println("打印发送消息: activemq发送消息"+i);//通过消息生产者发送消息messageProducer.send(message);}}
}

JSMComsumer

package com.zrr.activemq;import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;/*** 消费者(消息的接收者)* @author Admin**/
public class JSMConsumer {private static  String userName = ActiveMQConnection.DEFAULT_USER;//默认用户名private static final String password = ActiveMQConnection.DEFAULT_PASSWORD;//默认密码private static final String brokerUrl = ActiveMQConnection.DEFAULT_BROKER_URL;//默认连接地址public static void main(String[] args) {// TODO Auto-generated method stubConnectionFactory connectionFactory;//链接工厂Connection connection;//连接Session session;//会话(接收者或者发送者的消息线程)Destination destination;//消息目的地MessageConsumer messageConsumer;//消息消费者//实例化连接工厂connectionFactory = new ActiveMQConnectionFactory(userName, password, brokerUrl);try{//通过连接工厂获取连接connection = connectionFactory.createConnection();//启动连接connection.start();//创建会话session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//创建一个连接HelloWorld的消息列队 这里连接 的消息列队必须和消息生产者的消息列队是一样的不然消费者是找不到消息队列的destination = session.createQueue("point_demo");//创建消息消费者messageConsumer = session.createConsumer(destination);while(true){TextMessage textMessage = (TextMessage) messageConsumer.receive(100000);if(textMessage != null){System.out.println("打印收到的消息:" + textMessage.getText());}else {break;}}}catch(Exception e){e.printStackTrace();}}}

http://www.ppmy.cn/news/562408.html

相关文章

jsc

之前发现一个神器&#xff0c;js代码测试脱离浏览器&#xff0c;mac终端也可以做到 调试js的时候&#xff0c;一般都是用浏览器的开发者工具&#xff0c;这里给大家推荐另外一种&#xff0c;抛开浏览器&#xff0c;在终端执行的方式,Mac内置了一个javascript控制台程序&#xf…

国内各大知名公司薪酬 - zz

公司名   本科月薪  本科年薪   硕士月薪  硕士年薪  补充 北京微软  8000                  10(税后)  研究院助理 研究院 http://www.microsoft.com/china/ ibm研究院              10000    12-15 http://www-900.ibm…

Java --- JUC之JMM

目录 一、JMM的定义 二、JMM三大特性 2.1、可见性 2.2、原子性 2.3、有序性 三、多线程对变量的读写过程 四、happens-before 4.1、happens-before总原则 五、happens-before八条原则 5.1、次序规则 5.2、锁定规则 5.3、volatile变量规则 5.4、传递规则 5.5、线程…

cadence从原理图到pcb

完成原理图设计后&#xff0c;需要进行如下步骤才能开始画PCB&#xff1a; 原理图规制检测(DRC)生成网表新建PCB文件&#xff0c;设置封装路径导入网表设置原点和栅格绘制PCB板框将器件导入PCB 原理图规制检测(DRC) 选中原理图文件&#xff0c;运行Tools->Design Rules C…

Excel管理工具简陋但强大 vs 雷军为何说“没有设计是最好的设计

解密&#xff1a;雷军为何说“没有设计是最好的设计” 雷军洗白&#xff1a;没有刻意的设计才是最好的设计&#xff01; 有的人开发了10个到50个&#xff0c;甚至几百个Excel管理工具。每个工具里面有VBA代码几千行。 还有个高手&#xff0c;趁过年一个月左右时间完成一个公司用…

【vue3-element-admin 】基于 Vue3 + Vite4 + TypeScript5+ Element-Plus 从0到1搭建企业级后台管理系统(前后端开源)

vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 Element Plus 版本的后台管理前端解决方案&#xff0c;技术栈为 Vue3 Vite4 TypeScript Element Plus Pinia Vue Router 等当前主流框架。 相较于其他管理前端框架&#xff0c;vue3-element-admin 的优势在于一…

刻录光驱不能访问出现函数不正确问题解决

光驱无法访问&#xff0c;函数不正确 因为系统安装了Nero后&#xff0c;Windows的CD刻录功能被禁用了。 点击开始运行&#xff0c;输入services.msc,打开服务&#xff0c;双击IMAPI CD-Burning COM Service 服务&#xff0c;把启动类型改为自动&#xff0c;重启。 打开我的电脑…

linux用 弹出光驱 cdromeject_sw,Linux_Linux系统下光驱软开关与限速,一、光驱的软开关:eject -r cdro - phpStudy...

Linux系统下光驱软开关与限速 一、光驱的软开关&#xff1a; eject -r cdrom ##弹开指定光驱设备的仓门 弹开指定光驱设备的仓门&#xff0c;如只有一个光驱&#xff0c;直接用eject就可&#xff0c;如有两个光驱设备根据/dev/下设备文件来指定设备&#xff0c;如我的机器…