巧妙的设计

1. 判空逻辑,如果为空,抛异常,下面代码来自kafka client:

Assert.notNull(queue, () -> "No cache found for " + txIdPrefix);

2. 本地cache设计,一下代码来自kafka client:

	private final Map>> cache = new ConcurrentHashMap<>();

protected BlockingQueue> getCache(String txIdPrefix) {
		if (txIdPrefix == null) {
			return null;
		}
// 下面这个方法是针对每个txIdPrefix,都创建一个LinkedBlockingQueue,并缓存起来
		return this.cache.computeIfAbsent(txIdPrefix, txId -> new LinkedBlockingQueue<>());
	}

3. kafka consumer单线程的控制逻辑CAS:

// currentThread holds the threadId of the current thread accessing KafkaConsumer
    // and is used to prevent multi-threaded access
    private final AtomicLong currentThre

你可能感兴趣的:(常用的比较好的设计,linq,数据库,c#)