小编Jol*_*ger的帖子

生产者/消费者工作队列

我正在努力实现我的处理管道的最佳方法.

我的制作人将作品提供给BlockingQueue.在消费者方面,我轮询队列,包装我在Runnable任务中获得的内容,并将其提交给ExecutorService.

while (!isStopping())
{
    String work = workQueue.poll(1000L, TimeUnit.MILLISECONDS);
    if (work == null)
    {
        break;
    }
    executorService.execute(new Worker(work));   // needs to block if no threads!
}
Run Code Online (Sandbox Code Playgroud)

这不理想; 当然,ExecutorService有自己的队列,所以真正发生的事情是我总是完全耗尽我的工作队列并填充任务队列,随着任务的完成,队列会慢慢排空.

我意识到我可以在生产者端排队任务,但我真的不愿意这样做 - 我喜欢我的工作队列的间接/隔离是愚蠢的字符串; 它真的不是生产者的任何事情会发生在他们身上.迫使生产者对Runnable或Callable进行排队会破坏抽象,恕我直言.

但我确实希望共享工作队列代表当前的处理状态.如果消费者没有跟上,我希望能够阻止生产者.

我喜欢使用Executors,但我觉得我正在与他们的设计作斗争.我可以部分喝Kool-ade,还是我必须吞下它?我是否正在抵制排队任务?(我怀疑我可以设置ThreadPoolExecutor来使用1任务队列并覆盖它的执行方法来阻止而不是拒绝队列满,但这感觉很糟糕.)

建议?

java concurrency producer-consumer executorservice blockingqueue

10
推荐指数
1
解决办法
2万
查看次数

REST问题:PUT一个表示,获得一个不同的表示?

问题的简短版本:
特定URI的"GET"是否需要匹配该URI的"PUT"?

我想不是.原因如下:

鉴于资源是客户理论上不可知的抽象事物,当我们进行PUT时,我们必须只发送一个表示.基于对RFC2616的梳理,对于具有许多(可能是无限的?)表示的资源来说,它似乎没有完全明确,但这是我的想法; 如果您同意,请告诉我:

我的期望是,如果我将表示赋予资源,那么该URI上资源的所有其他表示应该保持一致(可能更新).换句话说,您告诉资源"使用此表示来重新定义自己".

因此,我应该能够做到这一点:

PUT/resources/foo/myvacation
内容类型:image/jpg
...

并跟进这个:

GET/resources/foo/myvacation
接受:image/png
...

并以不同的格式获取myvacation的更新版本(假设服务器知道如何操作).从中推断,这个复合原子"图像+元数据"PUT也应该是合法的:

PUT/resources/foo/myvacation
内容类型:multipart/form-data

内容处理:表格数据; name ="document"
Content-type:image/jpg
[..]
Content-disposition:form-data; name ="iptc"
Content-type:application/iptc
[..]
Content-disposition:form-data; name ="exif"
内容类型:application/exif
[..]

然后,因为服务器端内容协商(RFC2616第12.1节)可以基于任何事情进行,我们可以默认为"文档"内容:

GET/resources/foo/myvacation
内容类型:image/jpg
[..]

或者如果你像我那样相信RFC 2396第3.4节"查询组件是由资源解释的一串信息." 意味着带有查询字符串的URI引用与没有查询字符串的URI相同的资源(并且只是将application/x-form-urlencoded数据发送到资源时是同构的),那么这也应该是合法的:

GET/resources/foo/myvacation?content = exif
内容类型:application/exif
[..]

PUT的描述说:

PUT方法请求将所包含的实体存储在提供的Request-URI下.

对我来说,这是相当反REST的,除非你以非常自由的方式阅读它.我的解释是"PUT方法根据所包含实体的表示请求在提供的Request-URI上创建或更新资源."

后来,我们得到:

POST和PUT请求之间的根本区别体现在Request-URI的不同含义上.POST请求中的URI标识将处理所包含实体的资源.该资源可能是数据接受过程,某些其他协议的网关或接受注释的单独实体.与此相反,在URI的PUT请求识别附带请求的实体 - 用户代理知道URI打算和服务器不能尝试应用请求一些其他的资源.

我们需要同样地创造性地阅读这一点,但这里的关键点是"知道什么是URI"和"应用请求".

因此,对我来说,GET在给定URI处返回的表示不一定必须与给定URI的PUT相同,它只需要保持一致.

对或错?

rest mime uri content-type http

6
推荐指数
2
解决办法
781
查看次数

.npmrc中以双斜杠'//'开头的行是什么意思?

我天真地假定带有双斜杠('//')的.npmrc行表示注释,但是显然不是这样,因为删除它们时,我无法发布到本地注册表。

例:

registry=https://npm.myregistry.io/
//email=me@mydomain.com
//npm.myregistry.io/:_authToken="Pgwb34F123EQdHqE7OoZA=="
Run Code Online (Sandbox Code Playgroud)

如果删除以上//行,则将结果发布到

npm ERR! code ENEEDAUTH
npm ERR! need auth auth required for publishing
npm ERR! need auth You need to authorize this machine using `npm adduser`
Run Code Online (Sandbox Code Playgroud)

我在npmrc文档或ini模块解析器文档中找不到对该语法的任何引用。我假设它与合成属性有关?

node.js npm

1
推荐指数
1
解决办法
788
查看次数