生产者

DefaultMQProducer

   发送消息失败,消息重试。

      produce.send(msg,10)

      可以指定重试的次数

    producer,可以向多个主题发送消息

      设置Tag,可以进行一些简单的过滤

    不同模式的producer

      NormalProducer(普通)

      OrderProducer(顺序)

          producer.send(msg,MessageQuequeSelector,0(对了序号))

          当有多个consumer消费数据时(注意是同一个队列),数据1,2,3...    消费者a消费完数据1,才能去让其他消费者消费数据2。可以保证每个topic中的队列消费是顺序的

TransactionProducer

      TransactionProducer(事务)https://www.cnblogs.com/happyflyingpig/p/8283525.html

          注意:

              一条完整的事务是2条消息,先发送到broker,然后callback回来,算是1条数据,在callback中确认或者回滚到broker是第二条数据。

          状态:

              LocalTransactionState.UNKNOW         不清的状态(msg数据会丢失)

              LocalTransactionState.ROLLBACK_MESSAGE    提交回滚,消费者不能消费消息(但消息还是存在的)  

              LocalTransactionState.COMMIT_MESSAGE    提交成功,消费者可以消费消息

          版本的区别:

              当callback中发送确认消息时失败了,怎么知道消息处理处理失败的问题

                  之前的版本有提供,闭源的rocketmq也提供了(会定时检查broker中未成功的消息,会提供一个回调,告诉消息处理失败的消息)

                  可以通过先定时检查Consumer端的入库的数据,然后发送给Producer端,producer端匹配自己这边入库的数据,将没有发送出去的数据,重发。

 

消费者(先订阅服务,在发送消息)

DefaultMQPushConsumer

  setConsumerMessageBatchMaxsize(10);    看情况,不会一次性拉取10条数据。如果生成者先生产数据,有数据积累,可能会部分10条,10条的拉取。

  MessageModel

      CLUSTERING    集群模式,多个consumer消费数据,会负载均衡的消费Topic中的数据

      BROADCASTING  广播模式,多个consumer消费是同样的数据

 

 

   消费数据失败,重试。(可以得到重试的次数 )

      timeout重试(无限次数的重试)

      exception重试(理论性的重试,指定重试策略)

 

  消费群组

      当有多个消费者组成一个组之后,当a消费者,消费b数据失败了,然后会将消息交给c消费者。

      消费者默认有多个线程去消费,也可以设置线程数量(不需要再代码中去写多线程操作)

          consumer.setConsumerThreadMin()

          consumer.setConsumerThreadMax()

 

DefaultMQPullConsumer(自己去拉取数据)

  消费位置要自己手动管理

  MQPullConsumerScheduleService

   

 

Broker

    多slave配置,主节点挂了,不会主从切换,slave节点主要用来提供消费数据(写入,同步数据是主节点干)

 

Topic

    每个主题表示一个逻辑上的存储的概念,而在其MQ上,会有着与之对应的多个Queue队列

 

Filter

    需要在配置文件中配置filter

    broker可以指定多个filter

    上传的filter不能加中文

 

分布式事务(https://www.jianshu.com/p/453c6e7ff81c)

    使用消息队列避免事务

        A系统处理事务后产生一个凭证E,将这个凭证E发送到消息系统,进行其他的系统处理。可以通过这个凭证(消息)完成最终的一致性

        //  银行扣款

        //1.封装消息,将银行扣款的事件封装成一个消息

        //2.发送消息 send(msg,callback)

        //3.在callback处理本地事务

          update A set account=account-1000 where userid =1

        //4.本地事务完成之后,(这个时候发送的消息,Consumer并不是可见的,要Commit之后,Consumer才可见)

           成功(COMMIT)

           失败(ROLLBACK)

 

posted on 2018-05-12 22:46  13725566749  阅读(251)  评论(0编辑  收藏  举报