精华内容
下载资源
问答
  • MQ

    2019-10-15 19:38:47
    3.2什么时候使用MQ3.3不用MQ的系统耦合场景3.4使用MQ之后的解耦场景3.5不用MQ的同步高延时请求场景4.MQ都有什么优点和缺点?5.kafka、activemq、rabbitmq、rocketmq有什么区别?6.如何保证消息队列的高可用?7.如何...

    1.MQ是什么?

    MQ是message queue,消息队列,也叫消息中间件,遵守JMS(java message service)规范的一种软件
    是类似于数据库一样需要独立部署在服务器上的一种应用,提供接口给其他系统调用。
    MQ是一种跨进程的通信机制,用于上下游传递消息。
    在这里插入图片描述
    MQ是一种常见的上下游“逻辑解耦+物理解耦”的消息通信服务。
    使用了MQ之后,消息发送上游只需要依赖MQ,逻辑上和物理上都不用以来其他服务。

    2.说说在你的项目中是怎么使用MQ的?

    3.为什么使用MQ?

    3.1什么时候不适用MQ?

    技术选型
    在这里插入图片描述
    MQ是解耦利器,那为什么不都使用MQ?这是一个误区,调用与被调用的关系,是无法被MQ取代的。
    MQ的不足是:

    1. 系统更复杂,多了一个MQ组件
    2. 消息传递路径更长,延时会增加
    3. 消息可靠性和重复性护卫矛盾,消息不丢不重难以同时保证
    4. 上游无法知道下游的执行结果,致命点
      **例子:**用户登录场景,登录页面调用passport服务,passport服务的执行结果直接影响登录结果,此处的“登录页面”与“passport服务”就必须使用调用关系,而不能使用MQ通信
      结论:调用方法时依赖执行结果的业务场景,使用调用,而不是MQ。

    3.2什么时候使用MQ

    典型场景一:数据驱动的任务依赖
    设么是任务依赖,举个例子,互联网公司经常在凌晨进行一些数据统计任务,这些任务之间有一定的依赖关系,比如:
    1)task3需要使用task2的输出作为输入
    2)task2需要使用task1的输出作为输入
    这样的haul,tast1,task2,task3之间就有任务依赖关系,必须先执行task1,再执行task2,再执行task3.
    在这里插入图片描述
    对于这类需求,常见的实现方式是,使用cron人工排执行时间表:
    1)task1,0:00执行,经验执行时间为50分钟

    2)task2,1:00执行(为task1预留10分钟buffer),经验执行时间也是50分钟

    3)task3,2:00执行(为task2预留10分钟buffer)
    这种方法的坏处是:
    1)如果有一个任务执行时间超过了预留buffer的时间,将会得到错误的结果,因为后置任务不清楚前置任务是否执行成功,此时要手动重跑任务,还有可能要调整排班表
    2)总任务的执行时间很长,总是要预留很多buffer,如果前置任务提前完成,后置任务不会提前开始
    3)如果一个任务被多个任务依赖,这个任务将会成为关键路径,排班表很难体现依赖关系,容易出错
    4)如果有一个任务的执行时间要调整,将会有多个任务执行时间要调整
    无论如何,采用“cron排班表”的方法,各任务耦合,
    在这里插入图片描述
    优化方案,采用MQ解耦:
    1)task1准时开始,结束后发出一个“task1 done”的消息
    2)task2订阅“task1 done”的消息,收到消息后第一时间启动执行,结束后发一个“task2 done”的消息
    3)task3同理

    采用MQ的优点:
    1)不需要预留buffer,上游任务执行完,下游任务总会第一时间被执行
    2)依赖多个任务,被多个任务依赖都很好处理,只需要订阅相关消息即可
    3)有任务执行时间变化,下游任务都不需要调整执行时间
    需要特别说明的是:MQ只是用来传递上游任务执行完成消息,并不用于传递真正的输入输出数据。
    典型场景二:上游不关心执行结果
    上游需要关注执行结果要用“调用”,上游不关心执行结果时,就可以使用MQ了
    举个自理,58同城的很多下游需要关注“用户发布帖子”这个事件,比如招聘用户发布帖子后,招聘业务要奖励58豆,房产用户发布帖子后,房产业务要送2个指定,二手用户发布帖子后,二手业务要修改用户统计数据。
    在这里插入图片描述
    这种方法的坏处是:
    1)帖子发布流程的执行时间增加了
    2)下游服务宕机,可能导致帖子发布服务器影响,上下游逻辑+物理依赖严重
    3)每当增加一个需要知道“帖子发布成功”信息的下游,修改代码的是帖子发布服务,这一点是最恶心的,属于架构设计中典型的依赖倒转。
    在这里插入图片描述
    优化方案是,采用MQ解耦:
    1)帖子发布成功后,向MQ发一个消息
    2)哪个下游关注“帖子发布成功”的消息,主动去MQ订阅
    采用MQ的优点是:
    1)上游执行时间段
    2)上下游逻辑+物理解耦,除了与MQ有物理连接,模块之间都不相互依赖
    3)新增一个下游消息关注方,上游不需要修改代码
    典型场景三:上游关注执行结果,但执行时间很长
    有时候上游需要关注执行结果,但执行结果时间很长(典型的是调用离线处理,或者跨公网调用),也经常使用回调网关+MQ来解耦
    举个例子,微信支付,跨公网调用微信的接口,执行时间会比较长,但调用方又非常关注执行结果,此时一般怎么办?
    在这里插入图片描述
    一般采用“回调网关+ MQ”方案解耦:
    1)调用方直接跨公网调用微信接口
    2)微信返回调用成功,此时并不代表返回成功
    3)微信执行完成后,回调统一网关
    4)网关将返回结果通知MQ
    5)请求方收到结果通知
    需要注意,不应该由回调网关来调用上游来通知结果,如果是这样的话,每次新增调用方,回调网关都需要修改代码,仍然会反向依赖,使用回调网关+MQ的方案,新增任何对微信支付的调用,都不需要修改代码。

    3.3不用MQ的系统耦合场景

    自己听的一个例子:耦合问题
    在这里插入图片描述

    3.4使用MQ之后的解耦场景

    解决耦合问题
    在这里插入图片描述
    面试技巧:你需要去考虑一下你负责的系统中是否有类似的场景,就是一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。但是其实这个调用是不需要直接同步调用接口的,如果用MQ给他异步化解耦,也是可以的,你就需要去考虑在你的项目里,是不是可以运用这个MQ去进行系统的解耦。在简历中体现出来这块东西,用MQ作解耦。

    3.5不用MQ的同步高延时请求场景

    在这里插入图片描述

    3.6使用MQ进行异步化之后的接口性能优化

    在这里插入图片描述

    3.7没有用MQ的时候高峰期系统被打死的场景

    在这里插入图片描述

    3.8使用MQ来进行削峰场景

    在这里插入图片描述

    3.9架构中引入MQ可能会引发的问题(缺点:)

    在这里插入图片描述

    4.MQ都有什么优点和缺点?

    5.kafka、activemq、rabbitmq、rocketmq有什么区别?

    特性ActiveMQRabbitMQRocketMQkafka
    单击吞吐量万级,比RocketMQ和Kafka要低一个数量级万级,比RocketMQ和Kafka要低一个数量级10万级10万级别,一般配合大数据类的系统来进行实时数据计算,日志采集等场景
    topic数量对吞吐量的影响topic可以达到几百,几千个的级别,吞吐量会有较小幅度的下降topic从几十个到几百个的时候,吞吐量会大幅度下降,所以在同等机器下,kafka尽量保证topic数量不要过多。如果要支撑大规模topic,需要增加更多的机器资源
    时效性ms微妙级,延时是最低的ms级延迟在ms级以内
    可用性高,基于主从架构实现高可用性高,基于主从架构实现高可用性非常高,分布式架构非常高,kafka是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用
    消息可靠性有较低的概率丢失数据通过参数优化配置,可以做到0丢失通过参数优化配置,可以做到0丢失
    功能支持MQ领域的功能极其完备基于erlang开发,所以并发性能很强,性能极其好,延时很低MQ功能较为完善,还是分布式的,扩展性好功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用,是事实上的标准
    优劣非常成熟,业内使用多,偶尔会有丢失消息,并且社区维护少,较少在大规模吞吐的场景中用erlang语言开发,性能好,延时低,吞吐量到万级,MQ功能完善,管理界面友好,社区活跃,问题是吞吐量低一些,erlang源码维护定制难度高接口简单易用,大规模吞吐,性能好,分布式扩展方便,java源码可控,不足,阿里出台的技术万一被抛弃会有后面的风险超高的吞吐量,ms级别的延时,不足:消息重复消费,对数据准确性有影响,大数据领域以及日志采集的标准

    6.如何保证消息队列的高可用?

    6.1怎么开启这个镜像集群模式呢?

    其实很简单rabbitmq有很好的管理控制台,就是在后台新增一个策略,这个策略是镜像集群模式的策略,指定的时候可以要求数据同步到所有节点的,也可以要求就同步到指定数量的节点,然后你再次创建queue的时候,应用这个策略,就会自动将数据同步到其他的节点上去了。

    7.如何保证消息不被重复消费?如何保证消费的时候是幂等?

    kafka消费端可能出现的重复消费问题:
    在这里插入图片描述

    幂等性,通俗一点说:就是一个数据,或者一个请求,给你重复来多次,你得确保对应的数据是不会改变的,不能出错。
    问题:怎么保证幂等性?
    其实还是得结合业务来思考,我这里给几个思路:
    (1)比如你拿个数据要写库,你先根据主键查一下,如果这数据都有了,你就别插入了,update一下好吧

    (2)比如你是写redis,那没问题了,反正每次都是set,天然幂等性

    (3)比如你不是上面两个场景,那做的稍微复杂一点,你需要让生产者发送每条数据的时候,里面加一个全局唯一的id,类似订单id之类的东西,然后你这里消费到了之后,先根据这个id去比如redis里查一下,之前消费过吗?如果没有消费过,你就处理,然后这个id写redis。如果消费过了,那你就别处理了,保证别重复处理相同的消息即可。

    还有比如基于数据库的唯一键来保证重复数据不会重复插入多条,我们之前线上系统就有这个问题,就是拿到数据的时候,每次重启可能会有重复,因为kafka消费者还没来得及提交offset,重复数据拿到了以后我们插入的时候,因为有唯一键约束了,所以重复数据只会插入报错,不会导致数据库中出现脏数据

    如何保证MQ的消费是幂等性的,需要结合具体的业务来看

    8.如何保证消息的可靠性传输?消息丢失怎么办?

    如果说你这个是用mq来传递非常核心的消息,比如说计费,扣费的一些消息,因为我以前设计和研发过一个公司非常核心的广告平台,计费系统,计费系统是很重的一个业务,操作是很耗时的。所以说广告系统整体的架构里面,实际上是将计费做成异步化的,然后中间就是加了一个MQ。

    我们当时为了确保说这个MQ传递过程中绝对不会把计费消息给弄丢,花了很多的精力。广告主投放了一个广告,明明说好了,用户点击一次扣费1块钱。结果要是用户动不动点击了一次,扣费的时候搞的消息丢了,我们公司就会不断的少几块钱,几块钱,积少成多,这个就对公司是一个很大的损失。
    RabbitMQ可能存在的数据丢失问题
    在这里插入图片描述

    9.如何保证消息的顺序性?

    10.如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,怎么解决?

    11.如果让你写一个消息队列,该如何进行架构设计?说说思路?

    展开全文
  • 简述MQ

    2019-10-31 09:24:19
    简述MQ 定义 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通讯方式。 使应用程序通过写和检索出入列队的针对应用程序的数据来通讯,而无需专用连接来链接他们。 消息传递指的是程序之间通过在...

    简述MQ

    定义

    MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通讯方式。
    使应用程序通过写和检索出入列队的针对应用程序的数据来通讯,而无需专用连接来链接他们。
    消息传递指的是程序之间通过在消息中发送数据进行通讯,而不是通过直接调用彼此来通讯,直接调用通常是用于诸如远程调用技术。

    优点

    解耦:将消息写入消息队列,需要消息的时候自己从消息队列中订阅,从而原系统不需要做任何更改
    异步:将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快速度
    削峰:原系统慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期压是允许的。

    缺点

    系统可用性降低
    系统复杂度增加

    消息中间件的组成

    1 Broker 消息服务器,作为server提供消息核心服务
    2 Producer 消息生产者,业务的发起方,负责生产消息传输给broker,
    3 Consumer 消息消费者,业务的处理方,负责从broker获取消息并进行业务逻辑处理
    4 Topic 主题,发布订阅模式下的消息统一汇集地,不同生产者向topic发送消息,由MQ服务器分发到不同的订阅者,实现消息的广播
    5 Queue 队列,PTP模式下,特定生产者向特定queue发送消息,消费者订阅特定的queue完成指定消息的接收
    6 Message 消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输

    分类

    点对点:消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息。
    消息被消费以后,queue中不再存储,所以消息消费者不可能消费到已经被消费的消息。 Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。
    发布订阅:消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到topic的消息会被所有订阅者消费。
    queue实现了负载均衡,将producer生产的消息发送到消息队列中,由多个消费者消费。但一个消息只能被一个消费者接受,当没有消费者可用时,这个消息会被保存直到有一个可用的消费者。
    topic实现了发布和订阅,当你发布一个消息,所有订阅这个topic的服务都能得到这个消息,所以从1到N个订阅者都能得到一个消息的拷贝。

    常用对比

    特性ActiveMQRabbitMQRocketMQKafka
    开发语言javaerlangjavascala
    单机吞吐量万级万级10万级10万级
    时效性ms级us级ms级ms级以内
    可用性高(主从架构)高(主从架构)非常高(分布式架构)非常高(分布式架构)
    特点成熟的产品,在很多公司得到应用;有较多的文档;各种协议支持较好基于erlang开发,所以并发能力很强,性能极其好,延时很低;管理界面较丰富MQ功能比较完备,扩展性佳只支持主要的MQ功能,像一些消息查询,消息回溯等功能没有提供,毕竟是为大数据准备的,在大数据领域应用广。
    展开全文
  • 系统资源统一管理

    2021-04-08 11:20:39
    各项资源的创建不应该依赖于命令行,而应该走统一的流程 目前遇到的一些问题包括 1、mq队列找不到负责人,响应告警的粒度过粗,应该定位到个人、 应该关心什么呢? 1、mq队列 生产者系统有哪些?负责人是谁? 消费者...

    随着系统越来越多,复杂,资源日益增多,新功能在不断增加,老功能也时有废弃、迁移,叠加时不时的人员流动,感觉管理的效率越来越低

    资源的管理应该流程化,规范化,并且方便追踪,
    各项资源的创建不应该依赖于命令行,而应该走统一的流程

    目前遇到的一些问题包括
    1、mq队列找不到负责人,响应告警的粒度过粗,应该定位到个人、

    应该关心什么呢?
    1、mq队列
    生产者系统有哪些?负责人是谁?
    消费者系统有哪些?负责人是谁?消费者个数

    2、数据库表
    哪些系统会使用该表,负责人是谁

    系统的全局视图
    大的维度
    系统的每个接口都会和哪些系统交互,接口负责人是谁?

    展开全文
  • JAVA连接IBM MQ

    万次阅读 热门讨论 2017-01-20 18:03:50
    配置MQ ...创建队列管理器进入IBM MQ Explorer 创建队列管理器 右键“队列管理器”–>“新建”–>”队列管理器…” 添加队列管理器名字 一直下一步到这个页面,设定监听端口,点击完成成功创建队列管

    1、配置MQ

    统一说明:
    队列管理器名字为“MyTest”
    使用的端口为“1414”
    本地队列名称为“LOCALQUEUE”
    服务器连接通道名称为 “SERVERCONN”

    1.1、创建队列管理器

    进入IBM MQ Explorer
    这里写图片描述

    创建队列管理器
    右键“队列管理器”–>“新建”–>”队列管理器…”
    添加队列管理器名字
    这里写图片描述

    一直下一步到这个页面,设定监听端口,点击完成成功创建队列管理器
    这里写图片描述

    如图所示,为队列管理器创建成功
    这里写图片描述

    1.2、新建本地队列

    展开MyTest
    这里写图片描述

    右键“队列”–>”新建”–>“本地队列…”
    输入队列名称,点击完成
    这里写图片描述

    1.3、新建服务器连接通道

    右键“通道”–>”新建”–>“服务器连接通道…”
    这里写图片描述

    输入服务器连接通道,点击完成
    这里写图片描述

    1.4、确认编码字符集标识和确认端口号

    右键”MyTest”–>”属性…”
    打开”MyTest-属性”窗口
    这里写图片描述

    确认编码字符集标识为”1381”
    这里写图片描述

    确认端口号为”1414”
    这里写图片描述

    2、创建项目

    2.1、简介

    该项目为Maven结构的项目
    由于ibm mq的包没办法从Maven的中心库中直接下载,所以需要自行下载,文章末尾提供下载地址

    2.2、项目结构

    这里写图片描述

    2.3、代码

    2.3.1、pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.demo</groupId>
        <artifactId>mq_demo3</artifactId>
        <packaging>war</packaging>
        <version>0.0.1-SNAPSHOT</version>
        <name>mq_demo3 Maven Webapp</name>
        <url>http://maven.apache.org</url>
        <dependencies>
            <dependency>
                <groupId>javax.resource</groupId>
                <artifactId>connector</artifactId>
                <version>1.0</version>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    不加入javax.resource的connector包的话,会报如下错误
    这里写图片描述

    2.3.2、Mq.java

    package demo;
    
    import com.ibm.mq.MQC;
    import com.ibm.mq.MQEnvironment;
    import com.ibm.mq.MQException;
    import com.ibm.mq.MQGetMessageOptions;
    import com.ibm.mq.MQMessage;
    import com.ibm.mq.MQPutMessageOptions;
    import com.ibm.mq.MQQueue;
    import com.ibm.mq.MQQueueManager;
    
    public class Mq {
        static MQQueueManager qMgr;
        static int CCSID = 1381;
        static String queueString = "LOCALQUEUE";
    
        public static void connect() throws MQException {
            MQEnvironment.hostname = "127.0.0.1";
            MQEnvironment.channel = "SERVERCONN";
            MQEnvironment.port = 1414;
            MQEnvironment.CCSID = CCSID;
            //MQ中拥有权限的用户名
            MQEnvironment.userID = "MUSR_MQADMIN";
            //用户名对应的密码
            MQEnvironment.password = "123456";
    
            qMgr = new MQQueueManager("MyTest");
    
        }
    
        public static void sendMsg(String msgStr) {
            int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT | MQC.MQOO_INQUIRE;
            MQQueue queue = null;
            try {
                // 建立Q1通道的连接
                queue = qMgr.accessQueue(queueString, openOptions, null, null, null);
                MQMessage msg = new MQMessage();// 要写入队列的消息
                msg.format = MQC.MQFMT_STRING;
                msg.characterSet = CCSID;
                msg.encoding = CCSID;
                // msg.writeObject(msgStr); //将消息写入消息对象中
                msg.writeString(msgStr);
                MQPutMessageOptions pmo = new MQPutMessageOptions();
                msg.expiry = -1; // 设置消息用不过期
                queue.put(msg, pmo);// 将消息放入队列
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                if (queue != null) {
                    try {
                        queue.close();
                    } catch (MQException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
    
        public static void receiveMsg() {
            int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT | MQC.MQOO_INQUIRE;
            MQQueue queue = null;
            try {
                queue = qMgr.accessQueue(queueString, openOptions, null, null, null);
                System.out.println("该队列当前的深度为:" + queue.getCurrentDepth());
                System.out.println("===========================");
                int depth = queue.getCurrentDepth();
                // 将队列的里的消息读出来
                while (depth-- > 0) {
                    MQMessage msg = new MQMessage();// 要读的队列的消息
                    MQGetMessageOptions gmo = new MQGetMessageOptions();
                    queue.get(msg, gmo);
                    System.out.println("消息的大小为:" + msg.getDataLength());
                    System.out.println("消息的内容:\n" + msg.readStringOfByteLength(msg.getDataLength()));
                    System.out.println("---------------------------");
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                if (queue != null) {
                    try {
                        queue.close();
                    } catch (MQException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
    
        public static void main(String[] args) throws MQException {
            connect();
            sendMsg("我来测试一下");
            receiveMsg();
        }
    }
    

    2.4、运行结果

    这里写图片描述

    3、错误代码对应解决方案

    3.1、思路

    查询log日志,依据日志来解决出现的问题
    log日志路径(在安装MQ时有配置,以下为本机环境中的log日志路径):
    D:\ProgramData\IBM\MQ\qmgrs\队列管理器名字\errors

    3.2、出现:完成代码是 2,原因为 2058

    核对队列管理器的名字是否与代码中的名字相同

    3.3、出现:完成代码是 2,原因为 2035

    3.3.1、错误日志

    2017/1/20 17:15:25 - Process(12856.16) User(MUSR_MQADMIN) Program(amqzlaa0.exe)
                          Host(C6HJQ9ODE5KA9KS) Installation(Installation1)
                          VRMF(9.0.0.0) QMgr(MyTest)
    
    AMQ5540: 应用程序“WebSphere MQ Client for Java”没有提供用户标识和密码。
    
    说明:
    队列管理器已配置为需要用户标识和密码,但是未提供用户标识或密码。
    操作:
    确保应用程序提供有效的用户标识和密码,或者将队列管理器配置更改为 OPTIONAL 以允
    许应用程序连接未提供用户标识或密码的应用程序。 
    ----- amqzfuca.c : 4340 -------------------------------------------------------
    2017/1/20 17:15:25 - Process(12856.16) User(MUSR_MQADMIN) Program(amqzlaa0.exe)
                          Host(C6HJQ9ODE5KA9KS) Installation(Installation1)
                          VRMF(9.0.0.0) QMgr(MyTest)
    
    AMQ5541: 队列管理器 CONNAUTH CHCKCLNT(REQDADM) 配置造成认证检查失败。
    
    说明:
    因为用户标识 'musr_mqadmin' 是特权用户,并且队列管理器连接权限(CONNAUTH)配置
    引用了名为 'SYSTEM.DEFAULT.AUTHINFO.IDPWOS' 且具有 CHCKCLNT(REQDADM) 的认证信息
    (AUTHINFO)对象,所以已检查该用户标识及其密码。 
    
    该消息随先前的错误而显示,以澄清检查该用户标识和密码的原因。
    操作:
    请参阅此前的错误以获取更多信息。 
    
    确保密码由客户机应用程序指定并确保该密码是该用户标识的正确密码。队列管理器连接
    的认证配置决定了用户标识存储库。例如,本地操作系统用户数据库或 LDAP 服务器。 
    
    为了避免认证检查,您可以使用没有特权的用户标识,或者修改队列管理器的认证配置。
    您可以修改 CHLAUTH 记录中的 CHCKCLNT 属性,但通常不允许未认证的远程访问。 
    -------------------------------------------------------------------------------
    2017/1/20 17:15:26 - Process(14136.7) User(MUSR_MQADMIN) Program(amqrmppa.exe)
                          Host(C6HJQ9ODE5KA9KS) Installation(Installation1)
                          VRMF(9.0.0.0) QMgr(MyTest)
    
    AMQ9557: “MUSR_MQADMIN”的队列管理器用户标识初始化失败。
    
    说明:
    用于初始化用户标识“MUSR_MQADMIN”的调用失败,带有 CompCode 2 和原因 2035。
    操作:
    改正错误并再试一次。 
    ----- cmqxrsrv.c : 2363 -------------------------------------------------------

    3.3.2、错误分析

    应用程序“WebSphere MQ Client for Java”没有提供用户标识和密码。

    3.3.3、解决方案

    需要在代码中加入用户标识和密码(上面的代码中已加入)

    MQEnvironment.userID = "MUSR_MQADMIN";
    MQEnvironment.password = "123456";

    使用其他用户的话,需要用户已经存在在系统中的 mqm 用户组中

    3.4、出现:完成代码是 2,原因为 2035(不同的错误日志)

    3.4.1、错误日志

    2017/1/20 17:22:11 - Process(14136.9) User(MUSR_MQADMIN) Program(amqrmppa.exe)
                          Host(C6HJQ9ODE5KA9KS) Installation(Installation1)
                          VRMF(9.0.0.0) QMgr(MyTest)
    
    AMQ9776: 通道已由用户标识阻止
    
    说明:
    由于入站通道“SERVERCONN”的活动值映射至应阻止的用户标识,因此已从地址
    “127.0.0.1”阻止该通道。该通道的活动值为“MCAUSER(MUSR_MQADMIN)
    CLNTUSER(MUSR_MQADMIN) ADDRESS(C6HJQ9ODE5KA9KS)”。
    操作:
    请与系统管理员联系,管理员应当会检查通道认证记录,以确保已正确配置设置。 ALTER
    QMGR CHLAUTH 开关用于控制是否使用通道认证记录。可使用 DISPLAY CHLAUTH 命令来查
    询通道认证记录。 
    ----- cmqxrmsa.c : 1580 -------------------------------------------------------

    3.4.2、错误分析

    通道开启认证,将访问拒绝了

    3.4.3、解决方案

    第一种 关闭认证

    进入命令行

    //进入队列管理器
    >runmqsc MyTest
    //查看认证记录
    display qmgr chlauth
         5 : display qmgr chlauth
    AMQ8408: 显示队列管理器的细节。
       QMNAME(MyTest)                          CHLAUTH(ENABLED)
    //将认证关闭
    alter qmgr chlauth(disabled)
         7 : alter qmgr chlauth(disabled)
    AMQ8005: IBM MQ 队列管理器已更改。

    第二种 将对应的用户和主机加入认证记录

    博主还没找到对应的代码之后再加,有会的大神的话,希望能够在评论区给我留言,谢谢

    4、附件

    IBM MQ jar包
    项目源码

    展开全文
  • MQ简介

    2020-05-01 22:09:01
    一、何为MQMQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间...
  • Websphere MQ入门教程

    2013-06-15 16:21:22
    第二部分 Websphere MQ系统管理 43 第三章WebSphere MQ系统安装 43 目标 43 3.1 规划安装 43 3.1.1 硬件要求 43 3.1.2 软件要求 44 3.2 安装 WebSphere MQ 46 3.2.1 WebSphere MQ 文档 46 3.2.2 WebSphere MQ安装 47...
  • 关于MQ

    2013-10-24 22:31:17
    队列管理器是MQ系统中最上层的一个概念,由它为我们提供基于队列的消息服务。 2) 消息 在MQ中,我们把应用程序交由MQ传输的数据定义为消息,我们可以定义消息的内容并对消息进行广义的理解,比如:用户的各种...
  • WebSphere MQ

    2019-09-16 09:03:35
    WebSphere MQ WebSphere MQ 介绍 消息中间件概述 消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行--它们...
  • Rabbit MQ RabbitMQ是一个消息代理:它接受和转发消息。 你可以把它想象成一个邮局,RabbitMQ是邮箱,邮局和邮递员。 Rabbit MQ Tutorial 1 - Hello Rabbit MQ Rabbit MQ安装 Rabbit MQ Service运行 实现...
  • MQ详解及四大MQ比较

    2020-03-16 15:21:46
    消息中间件(一)MQ详解及四大MQ比较 1、概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上...
  • 0MQ

    万次阅读 2017-05-30 22:18:09
    ØMQ - The Guide Table of Contents By Pieter Hintjens, CEO of iMatix Please use the issue tracker for all comments and errata(勘误表). This version covers the latest stable(稳定的) relea
  • Websphere MQ

    2011-06-29 23:44:13
    **************************MQ*********************************** 第一部分 1、在当今世界的各种复杂I/T系统中,永远是集中与分散并存,各种新老技术并存的局面。 我们对系统的整合不应该执着于用一种技术将其...
  • 叨叨MQ

    2021-04-19 23:37:37
    MQ(message queue) MQ概述 MQ优势 1.应用解耦 2.异步提速 3.削峰填谷 劣势 1、系统可用性降低 2、系统复杂度提高 常见的 MQ 产品 RabbitMQ 1.1设计架构 1.2工作模式 1.3 基础特性 1.3.1 简单模式、work queues ...
  • WebSphere MQ&&Active MQ

    2015-08-27 17:24:27
    WebSphere MQ&&ActiveMQWebSphere MQ1、 中间件处于应用软件与系统软件之间,是一种以自己的复杂换取企业应用简单化的可复用的基础软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个...
  • 基于SpringCloud(Hoxton.SR8)+ SpringBoot(2.3.4)和Cloud Alibaba(2.2.1)构建的企业级前分离分离的微服务框架(用户权限管理统一授权,资源权限管理,JWT,MQ,网关API,Nacos注册配置中心,Seata分布式事务...
  • MQ基本概念

    2017-03-07 10:55:00
    队列管理器是MQ系统中最上层的一个概念,由它为我们提供基于队列的消息服务。 2) 消息 在MQ中,我们把应用程序交由MQ传输的数据定义为消息,我们可以定义消息的内容并对消息进行广义的理解,比如:用户的各种类型...
  • MQ概述

    2010-05-14 16:54:13
    并且,MQ在不同平台上提供统一的编程接口,仅需重新编译就可完成不同平台间程序的移植。MQ的API接口十分简单易学,用 户仅需利用MQ的13个常用而又功能强大的函数调用,便可以以最快的速度,写出各种复杂的应用程序。...
  • MQ企业架构

    2014-03-17 15:20:08
     Websphere MQ 是 IBM 功能强大的消息传送中间件产品,它以其成熟的技术和世界领先的产品向我们提供了的功能丰富、可靠易用的异构平台间实现可靠信息传递的成熟解决方案。使用 MQ 消息传递产品可以帮助业务应用在...
  • WebspherMQ

    2010-01-13 23:01:20
    MQ中,消息分为两种类型,非永久性(non-persistent)消息和永久性(persistent)消息,非永久性消息是存储在内存中的,它是为了提高性能而设计的,当系统掉电或MQ队列管理器重新启动时,将不可恢复。当用户对消息的...
  • 消息总线MQ

    2018-07-23 14:09:07
    1 什么时候用MQ? 1.1 MQ的基本概念   消息总线(Message Queue,MQ),是一种跨进程的通信机制,用于在上下游之间传递消息。MQ是一种常见的上下游“逻辑解耦+物理解耦”的消息通信服务,消息发送上游只需要依赖...
  • MQ介绍

    2009-04-07 14:16:48
    并且,MQ在不同平台上提供统一的编程接口,仅需重新编译就可完成不同平台间程序的移植。MQ的API接口十分简单易学,用户仅需利用MQ的13个常用而又功能强大的函数调用,便可以以最快的速度,写出各种复杂的应用程序。...
  • Websphere MQ入门教程.doc

    2010-10-09 15:17:20
    第二部分 Websphere MQ系统管理 43 第三章WebSphere MQ系统安装 43 目标 43 3.1 规划安装 43 3.1.1 硬件要求 43 3.1.2 软件要求 44 3.2 安装 WebSphere MQ 46 3.2.1 WebSphere MQ 文档 46 3.2.2 WebSphere MQ安装 47...
  • 一、MQ简介及特点 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。消息传递指的是...
  • 异步调用MQ

    2021-01-12 15:18:13
    MQ用于进程间通讯时,调用方(生产者)将要处理的内容作为消息发送给MQ即完成处理。MQ保证将消息传递给被调用方(消费者),被调用方收到消息后完成处理。 适用场景 同步适用于有实时性要求的场景,例如借款时的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,315
精华内容 6,526
关键字:

mq统一的管理