存在工单系统A和任务执行系统B,用户在A系统提交的工单会上送到B系统进行执行,在B系统中,上报的工单会按队列的方式顺序执行且执行完成之后不会回调通知A系统执行结果
时间: 2024-03-31 08:33:26 浏览: 9
可以使用Java中的消息队列来完成这个任务。具体实现步骤如下:
1. 在A系统中,将工单信息转换为JSON格式,通过消息队列将数据发送到B系统。可以使用Java中的ActiveMQ或者RabbitMQ来发送消息。
2. 在B系统中,接收到A系统发送的消息后,将工单信息加入任务队列中。
3. 在B系统中开启一个线程,不断从任务队列中取出任务并执行。执行完成后将结果保存到数据库或者其他持久化存储中。
4. 在B系统中,可以使用定时任务或者其他方式来检测任务是否执行完成。如果任务执行完成,则不做任何处理。如果任务执行失败,则可以将失败信息保存到数据库或者其他持久化存储中。
需要注意的是,由于B系统不会回调通知A系统执行结果,因此A系统无法获知任务是否执行成功。如果需要获知任务执行结果,可以考虑在B系统中开发一个API,供A系统查询任务执行状态。
相关问题
用Java代码完成以下内容存在工单系统A和任务执行系统B,用户在A系统提交的工单会上送到B系统进行执行,在B系统中,上报的工单会按队列的方式顺序执行且执行完成之后不会回调通知A系统执行结果
可以使用Java中的HTTP请求和JSON数据格式来完成这个任务。具体实现步骤如下:
1. 在A系统中,将工单信息转换为JSON格式,通过HTTP请求将数据发送到B系统。可以使用Java中的HttpURLConnection或者Apache HttpClient来发送HTTP请求。
2. 在B系统中,接收到A系统发送的HTTP请求后,解析JSON数据,将工单信息加入任务队列中。
3. 在B系统中开启一个线程,不断从任务队列中取出任务并执行。执行完成后将结果保存到数据库或者其他持久化存储中。
4. 在B系统中,可以使用定时任务或者其他方式来检测任务是否执行完成。如果任务执行完成,则不做任何处理。如果任务执行失败,则可以将失败信息保存到数据库或者其他持久化存储中。
需要注意的是,由于B系统不会回调通知A系统执行结果,因此A系统无法获知任务是否执行成功。如果需要获知任务执行结果,可以考虑在B系统中开发一个API,供A系统查询任务执行状态。
用Java代码实现存在工单系统A和任务执行系统B,用户在A系统提交的工单会上送到B系统进行执行,在B系统中,上报的工单会按队列的方式顺序执行且执行完成之后不会回调通知A系统执行结果
以下是Java代码的示例实现:
A系统发送工单到B系统:
```java
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public class ASender {
public static void sendWorkOrderToBSystem(String workOrderJson) throws IOException {
String url = "http://BSystemIP:port/workorder";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", "Mozilla/5.0");
con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
con.setDoOutput(true);
byte[] postData = workOrderJson.getBytes(StandardCharsets.UTF_8);
int postDataLength = postData.length;
con.setRequestProperty("Content-Length", Integer.toString(postDataLength));
con.getOutputStream().write(postData);
int responseCode = con.getResponseCode();
System.out.println("Response Code : " + responseCode);
}
public static void main(String[] args) {
String workOrderJson = "{\"workOrderId\":\"12345\",\"workOrderContent\":\"Do something.\"}";
try {
sendWorkOrderToBSystem(workOrderJson);
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
在上面的代码中,`sendWorkOrderToBSystem`方法接受一个工单的JSON字符串作为输入,使用HTTP POST请求将工单数据发送到B系统。在main方法中,我们可以调用该方法并传入工单数据。
B系统接收工单并执行:
```java
import java.util.LinkedList;
import java.util.Queue;
public class BReceiver {
private static Queue<String> workOrderQueue = new LinkedList<>();
public static void receiveWorkOrder(String workOrderJson) {
workOrderQueue.offer(workOrderJson);
}
public static void executeWorkOrders() {
while (!workOrderQueue.isEmpty()) {
String workOrderJson = workOrderQueue.poll();
// 执行工单
System.out.println("Executing work order: " + workOrderJson);
}
}
public static void main(String[] args) {
// 模拟接收两个工单
receiveWorkOrder("{\"workOrderId\":\"12345\",\"workOrderContent\":\"Do something.\"}");
receiveWorkOrder("{\"workOrderId\":\"67890\",\"workOrderContent\":\"Do something else.\"}");
// 执行工单
executeWorkOrders();
}
}
```
在上面的代码中,`BReceiver`类表示B系统,使用一个队列`workOrderQueue`来保存接收到的工单数据。`receiveWorkOrder`方法将一个工单的JSON字符串加入队列中,`executeWorkOrders`方法从队列中取出工单并执行,直到队列为空。
在main方法中,我们可以模拟接收两个工单并执行。注意:在实际应用中,B系统需要持续运行以接收和处理来自A系统的工单。