当前位置:首页 > 生活百科

activemq端口怎么调(activemq详解)

栏目:生活百科日期:2025-02-10浏览:0

一、下载与安装

直接去官网(
http://activemq.apache.org/)下载最新版本即可,由于这是免安装的,只需要解压就行了。安装完之后进入bin目录,双击 activemq.bat文件(linux下在bin目录下执行 activemq start)

二、访问控制台

在浏览器输入:http://ip:8161/admin/,出现如下界面表示启动成功,默认的用户名密码都是admin

三、修改端口号

61616为对外服务端口号

8161为控制器端口号

当端口号冲突时,可以修改这两个端口号。cd conf ,修改activemq.xml 修改里面的61616端口。修改jetty.xml,修改里面的8161端口。

queue队列模式:

和rabbitmq简单队列模式一样,若是有多个消费者消费同一个队列中的消息的话,默认也是轮询机制的消费

示例代码:

public class Productor {    public static final String BORKER_URL = "tcp://127.0.0.1:61616";    public static final String QUEUE_NAME = "queue1";    public static void main(String&[] args) throws JMSException {        //创建工厂        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(BORKER_URL);        //创建tcp连接        Connection connection = factory.createConnection();        //建立连接        connection.start();        /**         * 创建会话,1.是否开启事务,2.签收模式         */        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);        //创建队列(消息的目的地)        Queue queue = session.createQueue(QUEUE_NAME);        //创建生产者        MessageProducer producer = session.createProducer(queue);        //消息非持久化        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);        //消息持久化 默认是持久化的//        producer.setDeliveryMode(DeliveryMode.PERSISTENT);        //创建消息        TextMessage message = session.createTextMessage("你好吗");        //发送消息        producer.send(message);        producer.close();        session.close();        connection.close();        System.out.println("发送成功!");    }}public class Consumer {    public static final String BORKER_URL = "tcp://127.0.0.1:61616";    public static final String QUEUE_NAME = "queue1";    public static void main(String&[] args) throws JMSException {        //创建工厂        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(BORKER_URL);        //创建tcp连接        Connection connection = factory.createConnection();        //建立连接        connection.start();        /**         * 创建会话,1.是否开启事务,2.签收模式         */        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);        //创建/声明队列(消息的目的地)        Queue queue = session.createQueue(QUEUE_NAME);        //创建消费者        MessageConsumer consumer = session.createConsumer(queue);        /*while (true) {            //receive会阻塞线程            TextMessage message = (TextMessage)consumer.receive();            System.out.println("接收到消息:" + message.getText());        }*/        //监听的方式消费        consumer.setMessageListener(message -&> {            TextMessage textMessage = (TextMessage)message;            try {                System.out.println("1号接收到消息:" + textMessage.getText());            } catch (JMSException e) {                e.printStackTrace();            }        });    }}

topic队列模式:

称为发布订阅模式,生产者把消息发送给订阅给某个topic主题的消费者,是分发的模式,这种模式默认需要先启动消费者,不然就算生产者发布了某个topic主题的消息,消费者也消费不了;除非消费者提前订阅,并且做了消息持久化的处理,这样后启动消费者才能消费提前推送的消息。

代码:

public class Productor {    public static final String BORKER_URL = "tcp://127.0.0.1:61616";    public static final String TOPIC_NAME = "topic1";    public static void main(String&[] args) throws JMSException {        //创建工厂        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(BORKER_URL);        //异步投递        factory.setUseAsyncSend(true);        //创建tcp连接        Connection connection = factory.createConnection();        /**         * 创建会话,1.是否开启事务,2.签收模式         */        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);        //创建/声明topic(消息的目的地)        Topic topic = session.createTopic(TOPIC_NAME);        //创建生产者        ActiveMQMessageProducer producer = (ActiveMQMessageProducer)session.createProducer(topic);        //持久化        producer.setDeliveryMode(DeliveryMode.PERSISTENT);        //建立连接        connection.start();        //创建消息        TextMessage message = session.createTextMessage("你好吗");        //发送消息,异步发送回调函数        producer.send(message, new AsyncCallback() {            @Override            public void onSuccess() {                System.out.println("success");            }            @Override            public void onException(JMSException e) {                System.out.println("fail");            }        });        producer.close();        session.close();        connection.close();        System.out.println("发送成功!");    }}public class Consumer1 {    public static final String BORKER_URL = "tcp://127.0.0.1:61616";    public static final String TOPIC_NAME = "topic1";    public static void main(String&[] args) throws JMSException {        //创建工厂        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(BORKER_URL);        //创建tcp连接        Connection connection = factory.createConnection();        //制定clientId        connection.setClientID("my");        /**         * 创建会话,1.是否开启事务,2.签收模式         */        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);        //创建/声明topic(消息的目的地)        Topic topic = session.createTopic(TOPIC_NAME);        //订阅主题        TopicSubscriber subscriber = session.createDurableSubscriber(topic, "remark");        //建立连接        connection.start();        while (true) {            //receive会阻塞线程            //接收订阅的消息            TextMessage message = (TextMessage) subscriber.receive();            System.out.println("接收到消息:" + message.getText());        }        /*//创建消费者        MessageConsumer consumer = session.createConsumer(topic);        //建立连接        connection.start();        *//*while (true) {            //receive会阻塞线程            TextMessage message = (TextMessage)consumer.receive();            System.out.println("接收到消息:" + message.getText());        }*//*        //监听的方式消费        consumer.setMessageListener(message -&> {            TextMessage textMessage = (TextMessage)message;            try {                System.out.println("1号接收到消息:" + textMessage.getText());            } catch (JMSException e) {                e.printStackTrace();            }        });*/    }}

如何保证消息的可靠性

回答这个问题主要从持久化,事务,签收这几个方面入手

消息持久化的核心代码:

//queue模式的消息持久化 默认是持久化的 producer.setDeliveryMode(DeliveryMode.PERSISTENT);  /** * topic模式的持久化 */Topic topic = session.createTopic(TOPIC_NAME);ActiveMQMessageProducer producer = (ActiveMQMessageProducer)session.createProducer(topic);producer.setDeliveryMode(DeliveryMode.PERSISTENT);connection.start();

事务的核心代码(偏生产者):

//参数设置成trueconnection.createSession(false, Session.AUTO_ACKNOWLEDGE);//事务提交session.commit();

签收的核心代码(偏消费者):

//参数设置成手动提交connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);//消息签收message.acknowledge();

注意:若是既开启事务,又开启手动签收,以事务为准,只要事务被提交了也默认消息被签收了

性能提升:

1.利用nio的协议比tcp的性能高,

配置方式:在conf目录下activemq.xml照着下面配置

&<broker&>  ...  &<transportConnectors&>    &<transportConnector name="nio" uri="nio://0.0.0.0:61616"/&>    &</&<transportConnectors&>  ...&</broker&>

第二步是代码访问方式由tcp改为nio

//创建工厂ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("nio://127.0.0.1:61616");

2.jdbc+Journaling提高只有jdbc持久化的性能,它在做持久化入数据库之前,会先将数据保存到Journaling文件中,之后才慢慢同步到数据库中,等于中间加了一层缓冲层。

把数据库mysql的驱动包放到lib目录下配置方式:在conf目录下activemq.xml照着下面配置,其中有个createTablesOnStartup属性,默认值是true,表示每次启动后去数据库自动建表

&<persistenceAdapter&>  &<kahaDB directory="${activemq.data}/kahadb"/&> &</persistenceAdapter&> //上面是默认配置找到改成下面的配置&<persistenceAdapter&>   &<journalPersistenceAdapterFactory journalLogFiles="5" dataDirectory="${basedir}/activemq-data" dataSource="#mysql-ds"/&>&</persistenceAdapter&> //下面的代码写在&<beans&>节点中&<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&>  &<property name="driverClassName" value="com.mysql.jdbc.Driver"/&>  &<property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/&>  &<property name="username" value="activemq"/&>  &<property name="password" value="activemq"/&>  &<property name="poolPreparedStatements" value="true"/&>&</bean&>

“activemq端口怎么调(activemq详解)” 的相关文章

dnf值得培养的职业打造(2023dnf100级职业排行)

DNF等级预约活动上线了,&&#8221;哈林巅峰大挑战&&#8221;的冲级活动直接送95史诗装备和苍穹幕落系列武器,让不少玩家又有了练小号的冲动,那么DNF...

办公软件软件基本操作(2023年办公软件excel表格基础教

对于职场新人来说,如何提高办公效率是必修课之一这里有14个可以帮助你化身职场达人的办公软件,个个都是效率神器,献给想要提高工作效率的你~1、OfficeTool...

mysql数据库的安装步骤(教你如何安装mysql)

基于Windows平台的MySQL安装文件有两个版本,一种是以.msi作为后缀名的二进制分发版,一种是以.zip作为后缀的压缩文件。其中.msi的安装文件提供了...

上海生煎加盟费用多少(加盟生煎包总投资和营业利润)

那是2018年上半年5月份“五一&&#8221;劳动节,与丈夫一起去上海游玩,我们在上海玩了三四天,各种美食也是吃了无数,但当我们第一次吃到上海当地像包子一样却...

如何做数据分析图表百分比(3步制好数据百分比)

在数据展示过程中,我们会经常用到Excel内置的一些图表,比如说直线图、柱状图、饼图等。在展示百分比占比的时候很多同学应该都喜欢用百分比来展示,实际效果看起来确...

2023年组装电脑配置推荐(家用电脑台式机推荐配置)

台式电脑显卡价格不稳定制约了组装电脑的进程,现在依然还有很多人对显卡硬件持观望态度,客户盼望电脑显卡价格能重回原点,代理商们也不敢进货,其实依据目前的行情来看,...

华为快充数据线和普通数据线的区别(讲解快充主要是线还

支持快充的数据线和普通数据线有什么区别?快充的话,数据线是一样的。数据线一般是通用的,一般只是充电头不一样而已。一般数据线很少有专用的,普遍现象是一条数据线可以...

s3笔记本电脑怎么样,联想s3笔记本配置

ThinkPad诞生20多年来,已经成为商用笔记本电脑的第一品牌,无论是经典的T系列,还是X系列,ThinkPad都代表着优秀商用本的基因,成为了商务办公用户的...

icloud的照片怎么恢复到手机,icloud照片恢复到手机详细

如果您的照片都已经上传到iCloud当中,iPhone中还没有同步显示,可以通过以下方式进行同步。在操作之前请注意:1.请前往“设置”-“通用”-“iPhone...

root工具哪个好(手机一键root工具)

旧手机已经适应不了日常使用,用来作开发调试还是可以的。按此手机电源+音量键直接正常开机了,即进入不了recovery模式,也进入不了fastboot模式(boo...