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)

  三种方法

 

posted @ 2017-11-06 21:59  xqnq2007  阅读(168)  评论(0编辑  收藏  举报