我需要在Java中构建一个工作池,每个工作者都有自己的连接套接字; 当工作线程运行时,它使用套接字但保持打开以便以后重用.我们决定使用这种方法,因为与临时创建,连接和销毁套接字相关的开销需要太多的开销,所以我们需要一种方法,通过这种方法,工作池预先初始化了它们的套接字连接,准备好在保持套接字资源不受其他线程影响的同时承担工作(套接字不是线程安全的),所以我们需要这些内容......
public class SocketTask implements Runnable {
Socket socket;
public SocketTask(){
//create + connect socket here
}
public void run(){
//use socket here
}
Run Code Online (Sandbox Code Playgroud)
}
在应用程序启动时,我们想要初始化工作程序,并希望套接字连接在某种程度上......
MyWorkerPool pool = new MyWorkerPool();
for( int i = 0; i < 100; i++)
pool.addWorker( new WorkerThread());
Run Code Online (Sandbox Code Playgroud)
当应用程序请求工作时,我们将任务发送到工作池以立即执行...
pool.queueWork( new SocketTask(..));
Run Code Online (Sandbox Code Playgroud)
更新了工作代码
根据Gray和jontejj的有用评论,我有以下代码工作...
SocketTask
public class SocketTask implements Runnable {
private String workDetails;
private static final ThreadLocal<Socket> threadLocal =
new ThreadLocal<Socket>(){
@Override
protected Socket initialValue(){
return new Socket();
}
};
public SocketTask(String details){ …Run Code Online (Sandbox Code Playgroud) 在bash shell脚本中,我通常会运行:> file以清空文件.
现在使用鱼,事情略有不同,上述命令不起作用.
什么是鱼等价物?
我们目前正在探索Netflix的Flux Capacitor来研究它们的微服务架构的实现.目前,我们的兴趣主要集中在服务注册和动态查找功能上.
浏览代码,示例和配置,但有些事情并不清楚; 服务版本控制.如果eureka提供发现服务,而ribbon是基于eureka的REST客户端,那么客户如何说它需要服务1.2服务fooBar?客户端在哪里存储/获取该版本号; 从像本地配置文件此,抑或是通过动态地获得的archaius?
我正在对数据流执行一些分析并在Redis频道上发布结果.消费者订阅这些频道并获得实时数据馈送.所有历史数据分析结果都将丢失.
现在我想添加在Redis中存储历史数据的功能,以便消费者可以查询这些历史数据(主要是按时间).由于分析结果按时间划分,将结果存储在Redis中的好设计是什么?
我正在使用Groovy 1.8.4,试图得到封闭函数的名称......
def myFunction() {
println functionName??
}
Run Code Online (Sandbox Code Playgroud)
我试过delegate,this,owner,Groovy的抱怨没有找到这样的对象.
我也试过Java hack new Exception().getStackTrace()[0].getMethodName(),但那只是打印newInstance0
Groovy拥有太空船操作员<=>,提供了一种简单的方法来实现比较.我怎样才能以更加时髦的方式将其链接到下面的代码?在这个例子中,我想首先按价格比较项目,然后按名称比较两个具有相同价格的项目.
class Item implements Comparable {
int price
String name
int compareTo(Item other) {
int result = price <=> other.price
if (result == 0) {
result = name <=> other.name
}
return result
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用下面的查询在博客索引中找到"开发者"这个词......
http://localhost:9200/blog/_search
{
"query": {
"query_string": {
"query": "developer"
}
}
}
Run Code Online (Sandbox Code Playgroud)
该查询返回3次点击user和1 次点击post类型,我想要一个方面来反映那些点击显示像...
搜索结果...
博客帖子(1)
用户(3)
...但我不确定如何将一个方面与一个查询结合起来计算这些命中数,因为大多数例子我发现了计数字段命中率; 我尝试使用_index返回索引命中,但无法使其工作; 是否有类似的类型,例如_type,计算索引中的文档类型命中?
我有一个进程,其中多个线程打开多个套接字连接.我想查看此信息并映射哪个线程已打开哪个套接字端口.
lsof -i和netstatcommand给出进程ID,但无法显示线程ID.是否有打印此信息的命令?
尝试从Grails中的自定义groovy文件加载spring bean 2.3.7.我之前已经问过这个问题,但是经过几个小时的搜索,我无法找到从类路径加载的一致方法.
resources.groovy为多个自定义资源文件grails-app/conf/spring//## grails-app/conf/spring/MyBeansConfig.groovy
beans {
testsvc(TestService){
msg = 'hello'
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我正在使用beans {},而不是beans = {},显然它有所不同:
resources.groovy
这有效......
beans = {
loadBeans 'file:C:\\Proj\Test1\grails-app\\conf\\spring\\MyBeansConfig.groovy'
}
Run Code Online (Sandbox Code Playgroud)
......根据文档,这也应该,但不是:
importBeans("classpath:*MyBeansConfig.groovy")
Run Code Online (Sandbox Code Playgroud)
(为Grails 2.3.7工作)
根据lukelazarovic的建议,这种方法有效,因为Grails会自动将groovy文件复制(不编译)src/java到类路径中; 在日食和战争部署中工作正常:
//bean config files here
src/java/MyBeansConfig.groovy
src/java/FooBeansConfig.groovy
//resources.groovy
loadBeans('classpath*:*BeansConfig.groovy')
Run Code Online (Sandbox Code Playgroud)
这种方法允许自定义bean配置文件grails-app/conf/spring(对ideascultor和mark.esher的信用 )
//bean config files here …Run Code Online (Sandbox Code Playgroud) 是否可以将传统事件侦听器重构为Java 8 Stream,以便侦听器事件成为流源?
客户端提交任意作业,然后侦听结果:
Client client = new JobClient()
client.addTaskListener(this)
client.submitJobAsync( new MultiTaskJob()) //returns void, important (see below)
public void onTaskResult(TaskResult result){
if(result.isLastResult())
aggregateJobResults(result)
else
processResult(result)
}
Run Code Online (Sandbox Code Playgroud)
对于提交的任何作业,客户端会收到n个结果,但它不知道它将收到多少结果(它用于isLastResult()确定何时停止和聚合).
我想将侦听器重构为"供应商"或类似的东西,例如onTaskResult()流源:
Supplier<TaskResult> taskResultSupplier =
() -> Stream.of( .. ) //onTaskResult() feeds this
.map(result -> {
if(result.isLastResult())
//logic here
});
Run Code Online (Sandbox Code Playgroud)
像这样的东西; 如果我能在没有客户知道会有多少结果的情况下做到这一点,我就是金色的; 现在,submitJobAsync()返回无效,我想保持这种方式,但我也愿意接受选择......
在阅读了Tomasz Nurkiewicz针对类似场景的CompletableFutures之后,假设对客户进行了微小的更改,则存在备用选项:
List<CompletableFuture<TaskResult>> taskFutures =
client.submitJobAsync( new MultiTaskJob())
Run Code Online (Sandbox Code Playgroud)
在这里,客户获得一份清单CompletableFutures<TaskResult>,因此我们需要在完成时收集期货的结果:
//processes all task result …Run Code Online (Sandbox Code Playgroud) java ×4
groovy ×3
chaining ×1
cloud ×1
concurrency ×1
fish ×1
function ×1
future ×1
grails ×1
indexing ×1
java-8 ×1
java-stream ×1
linux ×1
netflix ×1
redis ×1
reflection ×1
sockets ×1
spring ×1
spring-dsl ×1
thread-local ×1
threadpool ×1