
是。
安装环境:linux redhat
activemq版本:580
1从>
activemqrc
bin/activemq setup ~/activemqrc
5启动activeMQ。
在activemq主目录键入如下命令:
bin/activemq start
然后会看到控制台日志输出如下:
INFO: Loading '/home/chenzhou/activemqrc'
INFO: Using java '/usr/java/jdk160_03/bin/java'
INFO: Starting - inspect logfiles specified in loggingproperties and log4jproperties to get details
INFO: pidfile created : '/usr/local/apache-activemq-580/data/activemq-localhostlocaldomainpid' (pid '18567')
我们也可以把日志输出到指定的日志文件中
bin/activemq start > /tmp/smlog 2>&1 &
然后日志就输出到/tmp/smlog文件中了
注意:官方文档中标明了如果按上述的方式启动后,如果我们把linux终端窗口关闭的话,则服务也会停止
具体如下:
不过,我尝试了一下关闭xshell终端,貌似服务依然正在,没有退出。
不过为了保险起见,我们在启动时最好还是加上nohup参数
启动命令如下:
nohup bin/activemq start
或者:
nohup bin/activemq start > /tmp/smlog 2>&1 &
查看启动情况:
通过端口查询,activeMQ默认配置下启动会启动8161和61616两个端口,其中8161是mq自带的管理后台的端口,61616是mq服务默认端口:
netstat -ntlp|grep 8161
netstat -an|grep 61616
访问activeMQ管理界面,>
1、把整个conf文件夹复制一份,比如叫conf2
2、修改里面的activemqxml文件
①brokerName不能和原来的重复
②数据存放的文件名称不能重复,比如<kahaDB directory = "${activemqdata}/kahadb2"/>
③所有涉及的transportConnector的端口,都要和原来的不一样。注意不要超出端口的范围(0-65535)
3、修改jettyxml,把里面的默认端口号8161改成别的,不如9161
4、到bin下面,复制一个activemq,比如叫activemq2
①修改程序的id,不能和原来的重复,ACTIVEMQ_PIDFILE="$ACTIVEMQ_DATA/activemq2pid"
②修改配置文件路径ACTIVEMQ_CONF="$ACTIVEMQ_BASE/conf2"
③修改端口,tcp://localhost:61616把61616改成和activemqxml里面的tcp端口一致。请注意,在activemq590版本中是这么修改。但我使用的是最新的5121版本,在activemq中找不到该tcp端口的配置,折腾了半天才发现该版本把这个配置挪到了env文件。所以就需要拷贝一份env,比如就叫env2吧,然后再env2里面把61616改成和activemqxml里面的tcp端口一致。最后别忘了把activemq2里面对env的引用改成env2。ACTIVEMQ_CONFIGS="/etc/default/activemq $HOME/activemqrc $ACTIVEMQ_HOME/bin/env2"
现在你可以到activemq的bin目录下分别执行/activemq start 和 /activemq2 start 了。这两个broker服务应该能正常启动了。
2022年来到深圳,感觉到了与之前所在城市的差异,心里多少有点落差。虽然时机不太对吧,但是相信一切都会好起来的,给自己加油呀!
整理了一些面试被问到的问题,虽然很多是无效面试,但是我也强行问了面试官,从他们的回答中猜测了一下他们关注的面试点,所以也算是有点收获吧,只是浪费了很多简历和路费,哭唧唧。
——1、区块链——
1-1、vue生命周期;
1-2、vuex属性;
1-3、用户开始登录到登录成功都发生了什么;
1-4、git常用的命令;
——2、金融:vue——
笔试:
2-1、深浅拷贝的区别,为什么会出现深浅拷贝,浅拷贝的优势;
2-2、强制中断 foreach 遍历;
2-3、多处组件复用;
2-4、你对前端是什么概念,前端在整个软件生态内是什么角色;
2-5、Vue2 中数据变化但视图没有发生同步更新,描述一下出现的场景,解决方式,以及该问题发生的可能原因;
2-6、nextTick 是如何确保开发者能够获取到最新的 DOM 状态的;
2-7、如何使用 mixins,有何利弊;
2-8、使用 Hooks 模式开发时,useMemo,useCallback 常用来作为优化的手段。描述一下它们各自的适用场景,以及背后的原理实现;
2-9、前端从 Jquery 时代演变至如今的三大框架,这种演变的根源是什么,jquery 解决了什么问题,如今的三大框架又是为了解决什么问题出现的?
视频面试:
2-10、js遍历树形结构,每个节点都有一个唯一ID,只能遍历一次;
2-11、组件封装的意义;
——3、知识产权:vue2、vue3、ts、react——
3-1、说一说面向对象的理解,包括继承、封装、多态等;
3-2、说一说promise;
3-3、webpack优化;
3-4、vuex使用场景;
3-5、描述一下对vue响应式原理的理解;
3-6、vue生命周期;
3-7、父子组件钩子函数执行顺序;
3-8、v-if和v-show;
3-9、js数据类型;
3-10、实现深拷贝;
——4、物流——
4-1、vue生命周期;
4-2、生命周期-修改元素样式在生命周期的哪个阶段;
4-3、生命周期-修改数据在哪个阶段;
4-4、生命周期-destroy里面会做哪些 *** 作;
4-5、怎么修改title的内容;
4-6、父子组件传参的具体写法;
4-7、v-model的多种写法;
4-8、js数据类型;
4-9、判断数组的方法;
4-10、实现左边固定右边自适应的布局;
4-11、实现div垂直水平居中;
4-12、flex:1;
4-13、flex详解;
4-14、call,apply,bind是干什么的;
——5、新兴产业——
5-1、封装路由,怎么拦截路由;
5-2、浏览器缓存有哪些,又问localStorage和sessionStrorage的区别和应用场景;
5-3、浏览器强缓存和协商缓存;
5-4、webpack打包机制,构建过程和配置;
5-5、性能优化方法;
5-6、前端的业务和后端的API是怎么做到数据实时请求的(问的其实是前端对后端API接口的封装和管理);
5-7、computed和watch;
5-8、说了几个关于大屏的应用场景,有没有做过,怎么做的;
——6、某水果:vue2、vue3、ts、各种前沿技术都用——
6-1、怎么封装一个组件库/工具类库,比如vue封装过什么复杂组件,jquery封装过什么类库;
6-2、get和post的区别,传参格式等;
6-3、promise怎么用的;
6-4、原型链,test()的原型链;
6-5、websocket;
6-6、es6中的generator;
6-7、es6中的set和map有啥区别,set为什么能去重;
6-8、项目难点;
——7、医疗健康:vue——
7-1、vue自定义指令配置;
7-2、webpack的理解;
7-3、对node的了解,用过express吗;
7-4、项目中的拖拽是怎么做的;
7-5、websocket和socket的区别;
7-6、听过mqtt吗,因为没听过所以解释了一下activemq的用法;
7-7、二维地图的聚合,如果有十万个点,会做什么优化;
7-8、地图实现多个点连成一条线会怎么做;
7-9、地图实现一条曲线;
7-10、内网下git怎么用的;
7-11、openlayers渲染机制;
7-12、父子组件通信方法;
7-13、router中实现拦截;
7-14、对象合并的方法;
7-15、父子组件的生命周期执行顺序,渲染阶段为什么会先执行父组件再执行子组件;
7-16、vue生命周期;
7-17、npm run dev, run build可以在项目中的什么位置找到;
7-18、vue中跳转页面的方法;
7-19、mixins用过吗;
7-20、判断引用类型的方法;
7-21、js数据类型;
7-22、判断基本数据类型的方法;
7-23、for in和for of的用法和区别,两者遍历的是索引还是属性值,两者都可以遍历对象吗;
7-24、foreach和map的区别,两者会不会改变原数组;
7-25、主要用什么技术栈;
7-26、行内元素和块级元素的区别,分别都有哪些,行块级元素有哪些;
7-27、div垂直水平居中,grid知不知道怎么用;
7-28、splice和slice;
——8、智慧园区:vue2、vue3、ts、uniapp——
8-1、flex了解吗,flex布局方向,flex:1 0的页面效果是怎样的;
8-2、做过移动端吗,了解uniapp吗;
8-3、keep-alive;问了一个没听明白的,可能和keep-alive有关系;
8-4、vuex中的action;不用vuex,怎么代替vuex;
8-5、promiseall和promiseon;
8-6、防止表单重复提交;
8-7、async,await的使用;
8-8、vue3和ts的了解;
8-9、防抖怎么控制时间;
8-10、vue中的data为什么要设计成一个函数;
——9、智慧工地:vue、uniapp、小程序——
9-1、Vuex是干什么的;
9-2、openlayers怎么用的;
9-3、性能优化;
9-4、spa首屏加载优化;
9-5、bundlerjs太大,打包怎么优化;
9-6、加密方式了解多少,比如md5,base64等,一大堆没听过的;
9-7、冒泡排序的实现原理;
9-8、js设计模式;
——10、某快递公司外包——
10-1、一棵树的数据,给的是列表格式,转换成树形结构;
10-2、项目相关的,聊天怎么做的,拖拽怎么做的,拖拽的数据怎么渲染的,拖拽重叠怎么处理的;
10-3、js设计模式;
——11、三维:vue、cesium——
11-1、一棵树的数据,给的是列表格式,转换成树形结构;
11-2、openlayers怎么用的,发布过wms吗,发布流程是怎样的;
11-3、openlayers转换经纬度的方法名是什么;
11-4、cesium常用的函数;
11-5、vue数据双向绑定原理;
11-6、Vue中data属性如果改变一个数组的下标,会不会马上发生变化,不变化可以怎么解决
11-7、数组常用方法有哪些;
11-8、 map和filter的区别;
11-9、es6常用的方法;
11-10、父子组件通信,兄弟组件通信;
11-11、new具体进行了什么 *** 作;
——12、医疗:vue、angular——
12-1、js渲染机制和运行机制;
12-2、vue数据绑定原理;
——13、建设行业:vue、uniapp——
笔试:
13-1、||与&运算符;
13-2、垂直居中方案;
13-3、let a=arr, b=a, c=arrconcat(), a[0]=3,打印b和c,应该是深浅拷贝;
13-4、实现font-size:12;
13-5、接口路径,给一个地址 >
通常mq可以保证先到队列的消息按照顺序分发给消费者消费来保证顺序,但是一个队列有多个消费者消费的时候,那将失去这个保证,因为这些消息被多个线程并发的消费。但是有的时候消息按照顺序处理是很重要的,那我们该如何来保证消息的顺序呢,下面将从activemq和rocketmq来看看,它们是如何来保证消息的顺序问题的?我们还可以有别的处理方案么?
1、利用Activemq的高级特性:consumer之独有消费者(exclusive consumer)
在ActiveMQ4x中可以采用Exclusive Consumer,broker会从queue中,一次发送消息给一个消费者,这样就避免了多个消费者并发消费的问题,从而保证顺序,配置如下:
当在接收信息的时候有一个或者多个备份接收消息者和一个独占消息者的同时接收时候,无论两者创建先后,在接收的时候,均为独占消息者接收。
当在接收信息的时候,有多个独占消费者的时候,只有一个独占消费者可以接收到消息。
当有多个备份消息者和多个独占消费者的时候,当所有的独占消费者均close的时候,只有一个备份消费者接到到消息。
当主消费者挂了话,会立刻启用故障切换转移到下一台消费者继续消费
独占消息就是在有多个消费者同时消费一个queue时,可以保证只有一个消费者可以消费消息,这样虽然保证了消息的顺序问题,不过也带来了一个问题,就是这个queue的所有消息将只会在这一个主消费者上消费,其他消费者将闲置,达不到负载均衡分配,而实际业务我们可能更多的是这样的场景,比如一个订单会发出一组顺序消息,我们只要求这一组消息是顺序消费的,而订单与订单之间又是可以并行消费的,不需要顺序,因为顺序也没有任何意义,有没有办法做到呢?答案是可以的,下面就来看看activemq的另一个高级特性之messageGroup。
2、利用Activemq的高级特性:messageGroups
Message Groups特性是一种负载均衡的机制。在一个消息被分发到consumer之前,broker首先检查消息JMSXGroupID属性。如果存在,那么broker会检查是否有某个consumer拥有这个message group。如果没有,那么broker会选择一个consumer,并将它关联到这个message group。此后,这个consumer会接收这个message group的所有消息,直到:
Consumer被关闭
Message group被关闭,通过发送一个消息,并设置这个消息的JMSXGroupSeq为-1
如上图所示,同一个queue中,拥有相同JMSXGroupID的消息将发往同一个消费者,解决顺序问题,不同分组的消息又能被其他消费者并行消费,解决负载均衡的问题,两全其美啦!
Rocketmq处理方案
那rocketmq又是如何保证消息顺序消费的问题呢?
Rocketmq跟传统的MQ有一点区别,这里有必要讲一下topic的概念,Topic是RocketMQ中的一个重要概念,RocketMQ的各组件都是围绕着Topic建立起对应关系的,在RocketMQ官方文档和本文中, Topic在不同的语境下被赋予了两种不同的语义:
1)消息的Topic属性值:在描述Consumer的订阅设置信息或消息的属性时。
2)Topic属性为某个值的消息(单个消息或消息集合):在描述Broker,Producer和Consumer的对应关系,Queue以及负载均衡策略时。
topic和queue的对应关系是一个topic拥有多个queue,当producer往broken发送消息时,消息会存储在topic下的不同队列中,而一个队列只会被一个consumer消费,这样消息户被均衡负载到不同的队列下,也就是会被多个消费者并行消费,顺序就无法保证了。该怎么办呢?答案是把需要顺序消费的消息发送到同一台broker server下的同一个队列,而这些消息也只会被同一个消费者消费,这样就可以保证严格的顺序了,如下图:
1、消息要有顺序,首先得保证producer发送消息有顺序,如上图msg1,msg2,msg3发送到queue0是要有顺序的,只要producer等待前面的消息发送成功,在发送后面的消息就完全可以保证了,
2、假设msg1发送给consumer1,消费没有响应,该怎么办呢?是继续发送msg2还是重新发送msg1,一般为了保证消息一定被消费,肯定会选择重发msg1到下一台消费者consumer2。
3、消费端1没有响应Server时有两种情况,一种是msg1确实没有到达(数据在网络传送中丢失),另外一种消费端已经消费msg2且已经发送响应消息,只是MQ Server端没有收到。如果是第二种情况,重发msg1,就会造成msg1被重复消费。也就引入了消息重复问题,那就要幂等了。
Rocketmq同样做到了保证消息的顺序情况下,均衡消费的消费消息。
综上,我看到,在分布式系统中,要想消息有顺序的被消费,无论是Activemq还是Rocketmq都要想办法让有顺序的消息被同一消费者消费,而不是并发的消费,在消费者消费成功后,接着才会消费下一个消息,这样就可以保证了严格的顺序。
JMS是一个用于提供消息服务的技术规范,它制定了在整个消息服务提供过程中的所有数据结构和交互流程。而activemq则是消息队列服务,是面向消息中间件(MOM)的最终实现,是真正的服务提供者。
jms 的一个标准或者说是一个协议 通常用于企业级应用的消息传递 主要有topic 消息(1 对多), queue 消息(1对1)。activemq 是一个jms 的实现, apache 出的
另外还其它的实现 jboss 。
MQ简介:
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBMWEBSPHERE MQ。
MQ特点:
MQ的消费-生产者模型的一个典型的代表,一端往消息队列中不断的写入消息,而另一端则可以读取或者订阅队列中的消息。MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品。
使用场景:
在项目中,将一些无需即时返回且耗时的 *** 作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
JMS简介:
JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
定义:
JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,翻译为Java消息服务。
简介:
JMS是一种与厂商无关的 API,用来访问消息收发系统消息。它类似于JDBC(Java DatabaseConnectivity):这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。许多厂商目前都支持JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ,这只是几个例子。 JMS 使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS 客户机向另一个JMS客户机发送消息。消息是 JMS 中的一种类型对象,由两部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。根据有效负载的类型来划分,可以将消息分为几种类型,它们分别携带:简单文本(TextMessage)、可序列化的对象 (ObjectMessage)、属性集合 (MapMessage)、字节流 (BytesMessage)、原始值流 (StreamMessage),还有无有效负载的消息 (Message)。
JMS和MQ的关系:
JMS是一个用于提供消息服务的技术规范,它制定了在整个消息服务提供过程中的所有数据结构和交互流程。而MQ则是消息队列服务,是面向消息中间件(MOM)的最终实现,是真正的服务提供者;MQ的实现可以基于JMS,也可以基于其他规范或标准。
支持JMS的开源MQ:
目前选择的最多的是ActiveMQ。
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS11和J2EE 14规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
主要特点:
1 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WSNotification,XMPP,AMQP
2 完全支持JMS11和J2EE 14规范 (持久化,XA消息,事务)
3 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring20的特性
4 通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 15 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 14 商业服务器上
5 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
6 支持通过JDBC和journal提供高速的消息持久化
7 从设计上保证了高性能的集群,客户端-服务器,点对点
8 支持Ajax
9 支持与Axis的整合
10 可以很容易得调用内嵌JMS provider,进行测试
11 ActiveMQ速度非常快;一般要比jbossMQ快10倍。
优点:是一个快速的开源消息组件(框架),支持集群,同等网络,自动检测,TCP,SSL,广播,持久化,XA,和J2EE14容器无缝结合,并且支持轻量级容器和大多数跨语言客户端上的Java虚拟机。消息异步接受,减少软件多系统集成的耦合度。消息可靠接收,确保消息在中间件可靠保存,多个消息也可以组成原子事务。
缺点:ActiveMQ默认的配置性能偏低,需要优化配置,但是配置文件复杂,ActiveMQ本身不提供管理工具;示例代码少;主页上的文档看上去比较全面,但是缺乏一种有效的组织方式,文档只有片段,用户很难由浅入深进行了解,二、文档整体的专业性太强。在研究阶段可以通过查maillist、看Javadoc、分析源代码来了解。
以上就是关于activemq访问地址是localhost吗全部的内容,包括:activemq访问地址是localhost吗、activemq 一台服务器如何配置多个broker、2022前端开发面试记录(深圳篇)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)