我正在开发Spring MVC控制器项目,我正在从浏览器中进行GET URL调用 -
以下是我通过浏览器进行GET调用的网址 -
http://127.0.0.1:8080/testweb/processing?workflow=test&conf=20140324&dc=all
Run Code Online (Sandbox Code Playgroud)
以下是在浏览器上点击后调用的代码 -
@RequestMapping(value = "processing", method = RequestMethod.GET)
public @ResponseBody ProcessResponse processData(@RequestParam("workflow") final String workflow,
@RequestParam("conf") final String value, @RequestParam("dc") final String dc) {
System.out.println(workflow);
System.out.println(value);
System.out.println(dc);
// some other code
}
Run Code Online (Sandbox Code Playgroud)
问题陈述:-
现在有什么办法,我可以从一些标题中提取IP地址吗?意思是我想知道哪个IP地址,呼叫即将到来,这意味着无论谁在上面调用URL,我都需要知道他们的IP地址.这可能吗?
我RestTemplate
用来对我们的服务进行HTTP调用,返回一个简单的JSON响应.我根本不需要解析那个JSON.我只需要返回我从该服务中获得的任何内容.
所以我将其映射到String.class
并将实际值JSON response
作为字符串返回.
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject(url, String.class);
return response;
Run Code Online (Sandbox Code Playgroud)
现在的问题是 -
我想HTTP Status codes
在点击URL后提取.如何从上面的代码中提取HTTP状态代码?我是否需要以目前的方式对其进行任何更改?
更新: -
这是我尝试过的,我能够得到回复和状态代码.但是,我是否总是需要设置HttpHeaders
和Entity
对象,如下所示我在做什么?
RestTemplate restTemplate = new RestTemplate();
//and do I need this JSON media type for my use case?
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
//set my entity
HttpEntity<Object> entity = new HttpEntity<Object>(headers);
ResponseEntity<String> out = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
System.out.println(out.getBody());
System.out.println(out.getStatusCode());
Run Code Online (Sandbox Code Playgroud)
几个问题 - 我需要有,MediaType.APPLICATION_JSON
因为我只是调用url返回响应,它可以返回JSON或XML或简单的字符串.
我试图使用jsoup解析HTML.这是我第一次使用jsoup,我也阅读了一些教程.下面是我试图解析的HTML表格 -
如果你看到我的下表,它tr
现在有三个(为了理解目的,我将它缩短为有三个表行,但一般情况下会更多).现在我想Cluster Name
从我的下表中提取并且它是相应的host name
,例如 - 我将提取Titan
为集群名称及其状态为down的所有主机名.
正如你可以看到下面的Titan
群集名称,我有两个主机名machineA.abc.com
和machineB.abc.com
其machineA
地位up
,但machineB
地位down
.
因此,我将打印Titan
为群集名称,并打印出machineB.abc.com
主机名,因为它已关闭.这可以用jsoup吗?
<table border=1>
<tr>
<td> </td>
<td> </td>
<td>Alert</td>
<td>Cluster Name</td>
<td>IP addr</td>
<td>Host Name</td>
<td>Type</td>
<td>Status</td>
<td>Free</td>
<td>Version</td>
<td>Restart Time</td>
<td>UpTime(Days)</td>
<td>Last probed</td>
<td>Last up</td>
</tr>
<tr bgcolor="ffffff">
<td><a href=showlog?ip_addr=127.0.0.1>Hist</a></td>
<td><a href=http://127.0.0.1:8080/test?full=y>VI</a></td>
<td bgcolor="ffffff"> </td>
<td>Titan</td>
<td>10.100.111.77</td>
<td>machineA.abc.com</td>
<td></td>
<td bgcolor="ffffff">up</td>
<td bgcolor="ffffff" align=right>88%</td>
<td bgcolor="ffffff">2.0.5-SNAPSHOT</td>
<td bgcolor="ffffff">2014-07-04 …
Run Code Online (Sandbox Code Playgroud) 我正在使用Spring MVC控制器项目.下面是我的控制器,我有一个声明的构造函数,我专门用于测试目的.
@Controller
public class TestController {
private static KeeperClient testClient = null;
static {
// some code here
}
/**
* Added specifically for unit testing purpose.
*
* @param testClient
*/
public TestController(KeeperClient testClient) {
TestController.testClient = testClient;
}
// some method here
}
Run Code Online (Sandbox Code Playgroud)
每当我启动服务器时,我都会遇到异常 -
No default constructor found; nested exception is java.lang.NoSuchMethodException:
Run Code Online (Sandbox Code Playgroud)
但是,如果我删除TestController
构造函数,那么它没有任何问题.我在这做什么错?
但是,如果我添加这个默认构造函数,那么它开始工作正常 -
public TestController() {
}
Run Code Online (Sandbox Code Playgroud) 我运行我的shell脚本上machineA
创建一个副本文件从machineB
和machineC
到machineA
.
如果文件不在machineB
,那么它应该在那里machineC
肯定.所以我会先尝试复制machineB
,如果不存在,machineB
那么我会去machineC
复制相同的文件.
在machineB
与machineC
会有这样的文件夹,YYYYMMDD
这个文件夹里面-
/data/pe_t1_snapshot
Run Code Online (Sandbox Code Playgroud)
因此,无论日期是YYYYMMDD
上述文件夹中此格式的最新日期- 我将选择该文件夹作为我需要开始复制文件的完整路径 -
所以如果这是最新的日期文件夹20140317
,/data/pe_t1_snapshot
那么这将是我的完整路径 -
/data/pe_t1_snapshot/20140317
Run Code Online (Sandbox Code Playgroud)
从我需要开始复制文件machineB
和machineC
.我需要复制周围400
文件machineA
从machineB
与machineC
每个文件大小1.5 GB
.
目前我有我的下面的shell脚本工作正常,因为我正在使用scp
但不知何故它需要〜2 hours
复制400
machineA中的文件,这对我来说太长了我想.:(
下面是我的shell脚本 -
#!/bin/bash
readonly PRIMARY=/export/home/david/dist/primary
readonly SECONDARY=/export/home/david/dist/secondary
readonly FILERS_LOCATION=(machineB machineC)
readonly MEMORY_MAPPED_LOCATION=/data/pe_t1_snapshot
PRIMARY_PARTITION=(0 3 5 7 …
Run Code Online (Sandbox Code Playgroud) 我有一个正在使用的客户库和传入DataRequest
对象拥有userid
,timeout
并且在它的一些其他领域.现在我使用这个DataRequest
对象创建一个URL,然后我使用了一个HTTP调用RestTemplate
,我的服务返回一个JSON响应,我用它来创建一个DataResponse
对象并将这个DataResponse
对象返回给它们.
以下是DataClient
客户通过将DataRequest
对象传递给我的类.DataRequest
如果在getSyncData
方法中花费太多时间,我正在使用客户传递的超时值来超时请求.
public class DataClient implements Client {
private RestTemplate restTemplate = new RestTemplate();
// first executor
private ExecutorService service = Executors.newFixedThreadPool(15);
@Override
public DataResponse getSyncData(DataRequest key) {
DataResponse response = null;
Future<DataResponse> responseFuture = null;
try {
responseFuture = getAsyncData(key);
response = responseFuture.get(key.getTimeout(), key.getTimeoutUnit());
} catch (TimeoutException ex) {
response = new DataResponse(DataErrorEnum.CLIENT_TIMEOUT, DataStatusEnum.ERROR);
responseFuture.cancel(true);
// logging …
Run Code Online (Sandbox Code Playgroud) 我有以下用于zookeeper的Dockerfile,我正在尝试为它创建一个图像,但它给了我一个错误.我最近开始使用Docker,并开始使用Zookeeper设置,所以我无法理解.这个错误是什么意思?
FROM ubuntu:trusty
MAINTAINER David
RUN apt-get update && apt-get install -y openjdk-7-jre-headless wget
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
# Install required packages
RUN apk add --no-cache \
bash \
su-exec
ENV ZOO_USER=zookeeper \
ZOO_CONF_DIR=/conf \
ZOO_DATA_DIR=/data \
ZOO_DATA_LOG_DIR=/datalog \
ZOO_PORT=2181 \
ZOO_TICK_TIME=2000 \
ZOO_INIT_LIMIT=5 \
ZOO_SYNC_LIMIT=2
# Add a user and make dirs
RUN set -x \
&& adduser -D "$ZOO_USER" \
&& mkdir -p "$ZOO_DATA_LOG_DIR" "$ZOO_DATA_DIR" "$ZOO_CONF_DIR" \
&& chown "$ZOO_USER:$ZOO_USER" "$ZOO_DATA_LOG_DIR" "$ZOO_DATA_DIR" "$ZOO_CONF_DIR"
ARG GPG_KEY=C823E3E5B12AF29C67F81976F5CECB3CB5E9BD2D
ARG DISTRO_NAME=zookeeper-3.4.9
# Download …
Run Code Online (Sandbox Code Playgroud) 我使用下面的类通过同步或异步使用套接字将数据发送到我们的消息队列,如下所示.这取决于我是否要调用同步或异步方法在套接字上发送数据的要求.大多数情况下,我们将异步发送数据,但有时我可能需要同步发送数据.
sendAsync
- 它以异步方式发送数据,我们不会阻塞正在发送数据的线程.如果未收到确认,则它将再次从SendToQueue
仅在构造函数中启动的后台线程重试.send
- 它在套接字上同步发送数据.它在内部调用doSendAsync
方法,然后在特定的超时时间内休眠,如果没有收到确认,则从cache
桶中删除,这样我们就不会再次重试.因此,上述两种方法之间的唯一区别是 - 对于异步情况,如果没有收到确认,我需要不惜一切代价重试但是对于同步我根本不需要重试,这就是为什么我在PendingMessage
类中存储更多状态的原因.
ResponsePoller
是一个类,它接收发送到特定套接字上的消息队列的数据的确认,然后调用handleAckReceived
下面的方法删除地址,以便我们在收到确认后不重试.如果收到确认,那么套接字是活的,否则它已经死了.
public class SendToQueue {
private final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
private final Cache<Long, PendingMessage> cache = CacheBuilder.newBuilder()
.maximumSize(1000000)
.concurrencyLevel(100)
.build();
private static class PendingMessage {
private final long _address;
private final byte[] _encodedRecords;
private final boolean _retryEnabled;
private final Object _monitor = new Object();
private long _sendTimeMillis;
private volatile boolean _acknowledged;
public PendingMessage(long address, byte[] encodedRecords, boolean retryEnabled) …
Run Code Online (Sandbox Code Playgroud) 我用RestTemplate
我HttpClient
作为执行URL,服务器将返回一个json字符串作为响应.客户将通过传递DataKey
其中的对象来调用此库userId
.
userId
,我将找出我可以获取数据然后将这些机器存储在a中的机器是什么LinkedList
,以便我可以按顺序执行它们.下面是我的DataClient类,它将由客户调用,他们将DataKey
对象传递给getData
方法.
public class DataClient implements Client {
private RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
private ExecutorService service = Executors.newFixedThreadPool(15);
public Future<DataResponse> getData(DataKey key) {
DataExecutorTask task = new DataExecutorTask(key, restTemplate);
Future<DataResponse> future = service.submit(task);
return future;
}
}
Run Code Online (Sandbox Code Playgroud)
下面是我的DataExecutorTask类:
public class DataExecutorTask implements Callable<DataResponse> {
private DataKey key;
private RestTemplate restTemplate;
public DataExecutorTask(DataKey key, RestTemplate restTemplate) …
Run Code Online (Sandbox Code Playgroud) 我使用datastax java驱动程序3.1.0连接到cassandra集群,我的cassandra集群版本是2.0.10.我与QUORUM一致性异步编写.
private final ExecutorService executorService = Executors.newFixedThreadPool(10);
public void save(String process, int clientid, long deviceid) {
String sql = "insert into storage (process, clientid, deviceid) values (?, ?, ?)";
try {
BoundStatement bs = CacheStatement.getInstance().getStatement(sql);
bs.setConsistencyLevel(ConsistencyLevel.QUORUM);
bs.setString(0, process);
bs.setInt(1, clientid);
bs.setLong(2, deviceid);
ResultSetFuture future = session.executeAsync(bs);
Futures.addCallback(future, new FutureCallback<ResultSet>() {
@Override
public void onSuccess(ResultSet result) {
logger.logInfo("successfully written");
}
@Override
public void onFailure(Throwable t) {
logger.logError("error= ", t);
}
}, executorService);
} catch (Exception ex) {
logger.logError("error= ", ex); …
Run Code Online (Sandbox Code Playgroud) java multithreading rate-limiting backpressure datastax-java-driver
java ×8
resttemplate ×2
spring ×2
spring-mvc ×2
ubuntu ×2
apt ×1
atomicity ×1
backpressure ×1
bash ×1
callable ×1
docker ×1
dockerfile ×1
html ×1
ip-address ×1
jsoup ×1
linux ×1
oop ×1
parsing ×1
scp ×1
unix ×1
url ×1