Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ActiveMQ中的大量SSL客户端

ActiveMQ中的大量SSL客户端
EN

Stack Overflow用户
提问于 2015-11-26 12:28:19
回答 1查看 1.3K关注 0票数 2

我在使用故障转移协议、安全套接层协议( SSL )和simpleAuthenticationPlugin的ActiveMQ中遇到了大量(1000)客户端的问题。运行了一段时间后,brocker就停止了,我一直在寻找日志文件中的一些错误,但是我没有找到任何东西--它是空的。

服务器-ubuntu15.04,java版"1.7.0_80“基本架构信息

我有一个分布式系统。它由C#客户端(节点)和一个Java客户端(管理器)组成。我使用的是安装在管理器所在主机上的ActiveMQ 5.12.1。通信仅在C#客户端和管理器之间进行。C#客户端之间不进行通信。

每个客户端(C#和java)使用一个队列进行侦听。当管理器想要向节点发送消息时,它使用唯一的队列来完成。当一个节点想要与管理器通信时,它会向管理器的队列发送一条消息。管理器每分钟轮询每个节点。管理器有两个线程,一个用于接收消息。第二,拉取有关信息的节点

代码如下:

代码语言:javascript
运行
AI代码解释
复制
ActiveMQConnectionFactory   connectionFactory = new ActiveMQConnectionFactory("failover://(nio+ssl://localhost:61617)");
        connectionFactory.setUserName("user");
        connectionFactory.setPassword("password");
        Connection connection = connectionFactory.createConnection();
        connection.start();
        connection.setExceptionListener(this);
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue("manager");
        MessageConsumer consumer = session.createConsumer(destination);
        Message message= null;
        while (!stop) {
            try{
            message = consumer.receive();
            if (message instanceof TextMessage) {
                TextMessage textMessage = (TextMessage) message;
                String text = textMessage.getText();
                processMessage(text);
            }
            }
            catch (Exception e){
                Logger.getInstance().log("Exception in message receive loop continue");
            }
        }

发送消息的管理器代码:

代码语言:javascript
运行
AI代码解释
复制
ActiveMQConnectionFactory   connectionFactory = new ActiveMQConnectionFactory("failover://(nio+ssl://localhost:61617)");
        connectionFactory.setUserName("user");
        connectionFactory.setPassword("password");
        Connection connection = connectionFactory.createConnection();
        connection.start();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        while(!stop) {
            for (everynode) {
                    Destination destination = session.createQueue(uniqueNodeQueue);
                    MessageProducer producer = session.createProducer(destination);
                    producer.setDeliveryMode(DeliveryMode.PERSISTENT);
                    TextMessage message = session.createTextMessage("in");
                    producer.send(message);
                    producer.close();
            }
            Thread.sleep(time);
        }

        // Clean up
        session.close();
        connection.close();

C#客户端使用Apache.NMS.ActiveMQ;

代码语言:javascript
运行
AI代码解释
复制
brokerUri="failover://(ssl://" +Server + ":61617?transport.acceptInvalidBrokerCert=true";
public NonDurableQueueSubscriber(string queueName, string brokerUri)
    {
        this.queueName = queueName;
        ConnectionFactory cf = new ConnectionFactory(brokerUri);
        cf.Password = "password";
        cf.UserName = "user";
        this.connectionFactory = cf;
        this.connection = this.connectionFactory.CreateConnection();
        if (this.connection.IsStarted)
            connection.Stop();
        this.connection.Start();
        this.session = connection.CreateSession();
        ActiveMQQueue queue = new ActiveMQQueue(queueName);
        this.consumer = this.session.CreateConsumer(queue, "2 > 1", false);
        this.consumer.Listener += new MessageListener(OnMessage);
    }
public void OnMessage(IMessage message)
    {
        ITextMessage textMessage = message as ITextMessage;
        if (this.OnMessageReceived != null)
        {
            this.OnMessageReceived(textMessage.Text);
        }
    }
static void onMessageReceived(string message)
    {
        NonDurableQueuePublisher mypublisher = new NonDurableQueuePublisher(queueManager, activemqBrokerUrl);
            mypublisher.SendMessage(info());
            mypublisher.Dispose();
    }
public NonDurableQueuePublisher(String queueName, string brokerUri)
    {
        this.queueName = queueName;
        ConnectionFactory cf = new ConnectionFactory(brokerUri);
        cf.Password = "password";
        cf.UserName = "user";
        this.connectionFactory = cf;
        this.connection = connectionFactory.CreateConnection();
        this.connection.Start();
        this.session = connection.CreateSession();
        ActiveMQQueue queue = new ActiveMQQueue(queueName);
        this.producer = session.CreateProducer(queue);
    }
public void SendMessage(String msg)
    {
        if (!this.isDisposed)
        {
            ITextMessage txtMessage = session.CreateTextMessage(msg);
            //txtMessage.NMSPersistent = false;
            producer.Send(txtMessage);
        }
        else
        {
            throw new ObjectDisposedException(this.GetType().FullName);
        }
    }

activeMQ.xml配置activeMQ拦截器

代码语言:javascript
运行
AI代码解释
复制
<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://activemq.apache.org/schema/core 

http://activemq.apache.org/schema/core/activemq-core.xsd">


<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>file:${activemq.conf}/credentials.properties</value>
    </property>
</bean>

<bean id="logQuery" class="io.fabric8.insight.log.log4j.Log4jLogQuery"
      lazy-init="false" scope="singleton"
      init-method="start" destroy-method="stop">
</bean>

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" deleteAllMessagesOnStartup="true" dataDirectory="${activemq.data}">

    <destinationPolicy>
        <policyMap>
          <policyEntries>
            <policyEntry topic=">" >

              <pendingMessageLimitStrategy>
                <constantPendingMessageLimitStrategy limit="1000"/>
              </pendingMessageLimitStrategy>
            </policyEntry>
          </policyEntries>
        </policyMap>
    </destinationPolicy>


    <managementContext>
        <managementContext createConnector="false"/>
    </managementContext>


    <persistenceAdapter>
        <kahaDB directory="${activemq.data}/kahadb"/>
    </persistenceAdapter>

      <systemUsage>
        <systemUsage>
            <memoryUsage>
                <memoryUsage percentOfJvmHeap="70" />
            </memoryUsage>
            <storeUsage>
                <storeUsage limit="100 gb"/>
            </storeUsage>
            <tempUsage>
                <tempUsage limit="50 gb"/>
            </tempUsage>
        </systemUsage>
    </systemUsage>



<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="user" password="password" groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
</plugins>
<sslContext>
        <sslContext keyStore="/ssl/broker.ks"
                    keyStorePassword="password"/>
    </sslContext>
    <transportConnectors>
    <transportConnector name="nio+ssl" uri="nio+ssl://0.0.0.0:61617?maximumConnections=20000&amp;wireFormat.maxFrameSize=104857600"/>

    </transportConnectors>


    <shutdownHooks>
        <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" />
    </shutdownHooks>

</broker>

<import resource="jetty.xml"/>

当我使用NIO时,一些有趣的日志被切掉了:

代码语言:javascript
运行
AI代码解释
复制
2015-11-25 17:20:31,495 | ERROR | Could not accept connection from null: java.io.IOException: javax.net.ssl.SSLException: Inbound closed before receiving peer's close_notify: possible truncation attack? | org.apache.activemq.broker.TransportConnector | ActiveMQ BrokerService[localhost] Task-616
2015-11-25 17:20:31,495 | WARN  | Transport Connection to: tcp://192.168.1.4:51939 failed: javax.net.ssl.SSLException: Inbound closed before receiving peer's close_notify: possible truncation attack? | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ NIO Worker 151
2015-11-25 17:20:25,493 | ERROR | Could not accept connection from null: java.io.IOException: javax.net.ssl.SSLException: Unsupported record version Unknown-0.0 | org.apache.activemq.broker.TransportConnector | ActiveMQ BrokerService[localhost] Task-787
2015-11-25 17:20:19,309 | ERROR | Could not accept connection from null: java.io.IOException: javax.net.ssl.SSLException: Unsupported record version Unknown-0.0 | org.apache.activemq.broker.TransportConnector | ActiveMQ BrokerService[localhost] Task-669
2015-11-25 17:19:53,051 | WARN  | Transport Connection to: tcp://192.168.1.23:51587 failed: org.apache.activemq.transport.InactivityIOException: Channel was inactive (no connection attempt made) for too (>30000) long: tcp://192.168.1.23:51587 | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ InactivityMonitor Worker

在NIO之前,我只尝试了SSL,结果是相同的→brocker关闭。

有人有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2015-11-26 15:23:57

您似乎超过了activemq.xml中配置的最大连接数限制。您可以通过JMX检查连接的数量以确认这一点。

您需要了解为什么您的设置创建了这么多打开的连接,以及为什么没有关闭它们(如果这是您的意图)。对我来说,C#代码看起来有点不靠谱(没什么特别之处),但既然我看不到全部内容,也许没什么问题。

这看起来不是ActiveMQ问题,而是应用程序问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33938751

复制
相关文章
【科技】神经网络使我们能够以新的方式“读懂人脸”
面部分析软件正被用来预测性行为和安全风险。 去年9月,斯坦福大学教授Michal Kosinski利用AI试图从他们脸上预测性取向时,引发了一场激烈的争论。现在,他已经用自己的软件来证明他所表达的观点
AiTechYun
2018/03/02
6580
【科技】神经网络使我们能够以新的方式“读懂人脸”
以编程方式创建Vue.js组件实例
最近参与了一个Vue.js项目,项目中需要能够以编程方式创建组件。通过编程,意思是使用JavaScript创建和插入组件,而无需在模板中编写任何内容。
前端知否
2020/03/23
7.9K3
使 Typecho 支持 emoji 的显示
每次发布带有emoji表情的文章就显示数据库错误 查找了相关资料 原因是emoji表情是4个字节 而utf8只能3个字节 所以需要修改数据库的排序规则为utf8mb4_unicode_ci
团团生活志
2022/08/16
2150
(转)iOS开发之UICollectionViewController系列(一) :Ready CollectionViewController
原文链接:https://www.cnblogs.com/ludashi/p/4791826.html
VV木公子
2018/06/05
5.6K0
(转)iOS开发之UICollectionViewController系列(一) :Ready CollectionViewController
iOS开发之窥探UICollectionViewController(一) -- Ready Your CollectionViewController
之前用CollectionViewController只是皮毛,一些iOS从入门到精通的书上也是泛泛而谈。这几天好好的搞了搞苹果的开发文档上CollectionViewController的内容,亲身体验了一下CollectionViewController的强大,之前一直认为CollectionView和TableView用法差不多,功能应该也是类似的。TableView的功能就已经很强大了,,CollectionView就是TableView的升级版,其功能更为强大。以后的几篇博客中好好的研究一下Col
lizelu
2018/01/11
1.7K0
iOS开发之窥探UICollectionViewController(一) -- Ready Your CollectionViewController
以编程方式执行Spark SQL查询的两种实现方式
摘 要 在自定义的程序中编写Spark SQL查询程序 1.通过反射推断Schema package com.itunic.sql import org.apache.spark.sql.SQLContext import org.apache.spark.{SparkConf, SparkContext} /**   * Created by itunic.com on 2017/1/2.   * Spark SQL   * 通过反射推断Schema   * by me:   * 我本沉默是关注互联
天策
2018/06/22
2.1K0
显示方式
08.05自我总结 一.显示方式 1.display 常用的三种方式 #第一种block 1.支持设置宽高 2.自带换行 一般情况所有有宽高、参与位置布局的都是block #第二种inline 1.不支持设置宽高,宽高只能有文本撑开 2.不带换行,一行显示不下会自动换行(保留数据的整体性) 一般情况存放文本的 #第三种inline-block 1.支持设置宽高 2.不带换行,一行显示不下会自动换行(以标签整体换行,标签左右有间距) 一般情况不去主动设置该显示方式,系统的两个img、input都设置为了单
小小咸鱼YwY
2019/09/11
6590
GridControl控件单元格居中显示
GridControl控件单元格居中显示 下面这样设置一步到位,不用再去Columns里面设置每一列的TextOptions属性了
别团等shy哥发育
2023/02/27
1.1K0
GridControl控件单元格居中显示
如何使特定的数据高亮显示?
当表格里数据比较多时,很多时候我们为了便于观察数据,会特意把符合某些特征的数据行高亮显示出来。这不,公司的HR小姐姐就有这个需求,说她手头上有一份招聘数据,她想把“薪水”超过20000的行突出显示出来,应该怎么操作呢?
猴子聊数据分析
2020/02/26
5.8K0
EXCEL单元格的引用方式
EXCEL单元格的引用包括相对引用、绝对引用和混合引用三种。 相对引用   公式中的相对单元格引用(例如 A1)是基于包含公式和单元格引用的单元格的相对位置。如果公式所在单元格的位置改变,引用也随之改变。如果多行或多列地复制公式,引用会自动调整。默认情况下,新公式使用相对引用。例如,如果将单元格 B2 中的相对引用复制到单元格 B3,将自动从 =A1 调整到 =A2。 绝对引用   单元格中的绝对单元格引用(例如 $A$1)总是在指定位置引用单元格。如果公式所在单元格的位置改变,绝对引用保持
用户1075292
2018/01/23
1.4K0
[CSS]JQuery 操作CSS使DIV显示或者隐藏
在某些需求中,你需要点击按钮显示某个div,并隐藏已经显示的按钮。同时点击另外一个按钮,又会隐藏已经显示的,并显示已经影藏的。当然当你使用mvvm框架(vue,react之类的)的框架的时候是不存在这些问题的。显然,当你翻到我这个博客的时候是没有用vue之类的,因此,你只要看我下面的代码就好了
用户2353021
2020/05/11
4.2K0
让JTable单元格可以自动换行、自动调整宽度以适合单元格内容
源代码也可以从我的Java资料站进行下载! http://Java.EchoChina.net 或 http://61.131.30.54/123/Develop/Java/SC/
阿敏总司令
2019/02/28
2K0
让JTable单元格可以自动换行、自动调整宽度以适合单元格内容
以 React 的方式思考
React 很棒的一点是创建应用中引导你思考的过程。这篇文档中,我们将通过运用React创建一个产品搜索列表,来引导你熟悉这个思考过程。
fanzhh
2019/08/20
3.5K0
以 React 的方式思考
现在,以编程方式在 Electron 中上传文件,是非常简单的!
本文主要探讨了在 Electron 应用中如何实现上传文件到服务器的功能,同时通过本地代理服务器来获取完整的cookie。首先介绍了在 Electron 应用中如何通过 XHR 上传文件到服务器,然后介绍了如何通过 LocalStorage 将文件保存在本地。最后,本文介绍了一种使用 Electron 创建本地代理服务器,从而获取完整的cookie的方法。
ios122
2017/12/27
5.3K0
现在,以编程方式在 Electron 中上传文件,是非常简单的!
python编程之API入门: (一)使
在网络编程中,我们会和API打交道。那么,什么是API?如何使用API呢?本文分享了一下我对API的理解以及百度地图API的使用。 API是"Application Programming Inte
py3study
2020/01/16
1.6K0
JS页面跳转使地址后面不显示参数[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。 背景 使用window.open()和window.location.href跳转时,新页面的地址栏会显示参数,如下:http://127.0.0.1:
全栈程序员站长
2022/07/31
6.1K0
以交互方式安装ESXi 6.0
ESXi 是VMware vSphere一整套解决方案的底层服务器系统,根据不同的应用场景可将ESXi安装在U盘、本地磁盘或ISCSI存储。本文章将介绍如果通过交互方式在本地磁盘安装ESXi 6.0。
全栈程序员站长
2022/07/05
7770
以交互方式安装ESXi 6.0
vscode 使水平滚动条固定持续显示
1、在编辑器窗口中键盘 ctrl/command + shift + p 2、输入 setting,打开设置(json) 3、在 JSON 文件中加入以下代码:
Leophen
2022/05/07
2.5K0
Docker以挂载方式安装RocketMQ
如果你还没有安装 Docker,请先安装。可以参考官方文档 https://docs.docker.com/install/ 进行安装
关忆北.
2023/10/11
1.6K0
Docker以挂载方式安装RocketMQ
以 GitOps 方式管理 Terraform 资源
这是我们希望揭示Flux 生态系统[1]项目的博文系列中的第一篇。这次是Terraform 控制器[2]。
CNCF
2022/11/28
2.4K0
以 GitOps 方式管理 Terraform 资源

相似问题

以编程方式开始使用UICollectionViewController

10

使用uibutton以编程方式将pushViewController连接到UICollectionviewController

21

以编程方式使片段全屏显示

31

以编程方式创建UINavigationController,并在容器中嵌入UICollectionViewController

12

以编程方式在UICollectionViewController的单元格中设置UIView子视图的高度?

50
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档