zoukankan      html  css  js  c++  java
  • 11.6

    一 消息队列的主题模型和队列模型

    http://blog.csdn.net/heyutao007/article/details/50131089

    1. 消息生产者、消息者、队列、主题

    消息生产者Producer:发送消息到消息队列。

    消息消费者Consumer:从消息队列接收消息。

    消息队列Queue:一个先进先出的消息存储区域。消息按照顺序发送接收,一旦消息被消费处理,该消息将从队列中删除。

    主题Topic:一种支持消息多个订阅者的机制。

    2. 点对点/Queue消息队列模型

    一个生产者向一个特定的队列发送消息,一个消费者从该队列中接收消息;

    消息的生产者和消费者可以不同时处于运行状态。

    每一个成功处理的消息都由消息消费者签收确认(Acknowledge)。如图:

    3. 发布订阅消息模型Topic

    发布订阅模型中,支持向一个特定的消息主题Topic发布消息。0个或多个订阅者可能对接收来自特定消息主题的消息感兴趣。在这种模型下,发布者和订阅者彼此不知道对方,这种

    模式被概括为:

    多个消费者可以获得消息在发布者和订阅者之间存在时间依赖性,即必须先订阅,再发送消息,而后接收订阅的消息,这个操作顺序必须保证。如图:

    4. 消息的顺序性保证

    基于Queue消息模型,利用FIFO先进先出的特性,可以保证消息的顺序性。

    5. 消息的ACK机制

    即消息的Ackownledge确认机制,

    为了保证消息不丢失,消息队列提供了消息Acknowledge机制,即ACK机制,当Consumer确认消息已经被消费处理,发送一个ACK给消息队列,此时消息队列便可以删除这个消

    息了。如果Consumer宕机/关闭,没有发送ACK,消息队列将认为这个消息没有被处理,会将这个消息重新发送给其他的Consumer重新消费处理。

    6. 消息的同步和异步收发

    同步:消息的收发支持同步收发的方式。同时还有另一种同步方式:同步收发场景下,消息生产者和消费者双向应答模式,例如:张三写封信送到邮局中转站,然后李四从中转站获

    得信,然后在写一份回执信,放到中转站,然后张三去取,当然张三写信的时候就得写明回信地址。

    消息的接收如果以同步的方式(Pull)进行接收,如果队列中为空,此时接收将处于同步阻塞状态,会一直等到消息的到达。

    异步:消息的收发同样支持异步方式:异步发送消息,不需要等待消息队列的接收确认;异步接收消息,以Push的方式触发消息消费者接收消息。

    7. 消息的事务支持

    消息的收发处理支持事务,例如:在任务中心场景中,一次处理可能涉及多个消息的接收、处理,这应该处于同一个事务范围内,如果一个消息处理失败,事务回滚,消息重新回到

    队列中。

    8. 消息的持久化

    消息的持久化,对于一些关键的核心业务来说是非常重要的,启用消息持久化后,消息队列宕机重启后,消息可以从持久化存储恢复,消息不丢失,可以继续消费处理。

    9. 消息队列的高可用性

    在实际生产环境中,使用单个实例的消息队列服务,如果遇到宕机、重启等系统问题,消息队列就无法提供服务了,因此很多场景下,我们希望消息队列有高可用性支持,例如

    Azure ServiceBus Messaging就有高可用保障机制;RabbitMQ有镜像+HAProxy的高可用性方案,ActiveMQ也有基于LevelDB+ZooKeeper的高可用性方案。这点大家在

    实际技术选型时需要重要考虑,云端的MQ服务,比如Azure Messaging的SLA就承诺了99.9%, 也是非常推荐的。

    二 如何解析 json中的html标签数据 

    在前端,如果用innerText的方式显示json字段数据:

      后端什么数据前端就是什么数据。

    如果用innerHtml的方式显示json字段:

    会把相应的数据进行decode。

    还有另外的方法

    可以参考:http://my.oschina.net/parker/blog/49225

     三 二叉树的三种遍历,前中后,

    四 python读取mysql  

    import pymysql
    import pandas as pd
    ## 加上字符集参数,防止中文乱码
    dbconn=pymysql.connect(
      host="localhost",
      database="test",
      user="root",
      password="111111",
      port=3306,
      charset='utf8'
     )
      
    #sql语句
    sqlcmd="select id,name from user limit 10"
      
    #利用pandas 模块导入mysql数据
    a=pd.read_sql(sqlcmd,dbconn)
    #取前5行数据
    b=a.head()
    print(b)
    

     写出一段 python代码实现删除一个List里面的重复元素:

    list(set(lista))

    编程 用sort进行排序,然后从最后一个元素开始判断:

    赋值,浅拷贝,深拷贝,

    http://python.jobbole.com/82294/

    http://www.cnblogs.com/xueli/p/4952063.html

    http://www.cnblogs.com/wilber2013/p/4645353.html

    http://blog.csdn.net/yugongpeng_blog/article/details/46604439

    http://www.jb51.net/article/61902.htm

    http://www.jb51.net/article/61902.htm

    http://www.cnblogs.com/Eva-J/p/5534037.html

    赋值:传引用 

    浅拷贝: 产生一新对象,但对于对象中的元素,仍然是引用 

    深拷贝,产生一新对象,但对于对象中的元素,重新生成一份,并且对象中的元素也是深拷贝 

    深浅拷贝是对于组合对象如序列来说 ,对于原子类型对象,没有拷贝一说,都是对原对象的引用

    实现单例模式:

    class Singleton(type):
    	def __init__(cls, *args,**kw):
    		super(Singleton, cls).__init__(*args,**kw)
    		cls.instance = None
    
    	def __call__(cls, *args,**kw):
    		if cls.instance is None:
    			cls.instance = super(Singleton, cls).__call__(*args, **kw)
    
    		return cls.instance
    
    class MyClass(object):
    	__metaclass__ = Singleton
    
    a=MyClass()
    b=MyClass()
    print id(a),id(b)
    

      

    class Singleton(object):
    	__instance=None
    	def __init__(self):
    		#super(Singleton, cls).__init__(*args,**kw)
    		pass
    
    	def __new__(cls, *args,**kw):
    		if Singleton.__instance is None:
    			Singleton.__instance = object.__new__(cls,*args, **kw)
    
    		return Singleton.__instance
    
    class MyClass(Singleton):
    	a=4
    
    a=MyClass()
    b=MyClass()
    print id(a),id(b)
    

      

    def singleton(cls):
    	instances = {}
    	def getinstance():
    		if cls not in instances:
    			instances[cls] = cls()
    		return instances[cls]
    	return getinstance
    
    @singleton
    class MyClass:
    	a=8
    a=MyClass()
    b=MyClass()
    print id(a),id(b)
    

      三种方法

  • 相关阅读:
    771. Jewels and Stones
    706. Design HashMap
    811. Subdomain Visit Count
    733. Flood Fill
    117. Populating Next Right Pointers in Each Node II
    250. Count Univalue Subtrees
    94. Binary Tree Inorder Traversal
    116. Populating Next Right Pointers in Each Node
    285. Inorder Successor in BST
    292. Nim Game Java Solutin
  • 原文地址:https://www.cnblogs.com/xqnq2007/p/7795451.html
Copyright © 2011-2022 走看看