Apache Camel - 3 - Camel小栗子(HTTP)

Apache Camel快速入门 上 1、本专题主旨 1-1、关于技术组件 在这个专题中,我们介绍了相当数量技术组件:Flume、Kafka、ActiveMQ、Rabbitmq、Zookeeper、Thrift 、Netty、DUBBO等等,还包括本文要进行介绍的Apache Camel。有的技术组件讲得比较深入,有的技术组件则是点到为止。于是一些读者朋友发来信息向我提到,这个专题的文章感觉就像一个技术名词的大杂烩,并不清楚作者的想要通过这个专题表达什么思想。 提出这个质疑的朋友不在少数,所以我觉得有必要进行一个统一的说明。这个专题的名. 阅读详情

Camel 发布HTTP

Apache Camel相关代码已经上传GitHub,需要的自取:GitHub - Apache Camel 完整Demo

如果觉得还行,麻烦点个Star

 

在没有使用Camel之前,我们使用JDK 自带的HttpServer来发布Http服务。

具体的代码不看了,我们看下发布Http服务相关的类有多少吧...

很多是吧...

这里面还要写配置文件,配置上下文接口和接口实现类...实在是麻烦....

再来看看使用Camel,是怎么发布HTTP服务的...

Apache Camel 发布Http服务 完整代码/工程Demo 我上传了...

现在优快云下载必须要积分了...以前我都是0积分的,方便积分不多的童鞋...哎优快云变了...

Apache Camel Http服务 Demo样例

代码一:

package com.test.camel.helloworld;

import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.model.ModelCamelContext;
import org.apache.log4j.PropertyConfigurator;

/**
* 郑重其事的写下 helloworld for Apache Camel
*/
public class HelloWorld extends RouteBuilder {

	public static void main(String[] args) throws Exception {

	PropertyConfigurator.configure("./conf/log4j.properties");
	PropertyConfigurator.configureAndWatch("./conf/log4j.properties", 1000);

	// 这是camel上下文对象,整个路由的驱动全靠它了。
	ModelCamelContext camelContext = new DefaultCamelContext();

	// 启动route
	camelContext.start();

	// 将我们编排的一个完整消息路由过程,加入到上下文中
	camelContext.addRoutes(new HelloWorld());

	/**
	 * ==========================<br>
	 * 为什么我们先启动一个Camel服务 再使用addRoutes添加编排好的路由呢?<br>
	 * 这是为了告诉各位读者,Apache Camel支持动态加载/卸载编排的路由 这很重要,因为后续设计的Broker需要依赖这种能力<br>
	 * ==========================<br>
	 */

	// 通用没有具体业务意义的代码,只是为了保证主线程不退出
	synchronized (HelloWorld.class) {
			HelloWorld.class.wait();
	}
	}

	@Override
	public void configure() throws Exception {
			// 在本代码段之下随后的说明中,会详细说明这个构造的含义
			from("jetty:http://0.0.0.0:8282/doHelloWorld").process(new HttpProcessor()).to("log:helloworld?showExchangeId=true");
	}

}

代码二:

package com.test.camel.helloworld;

import java.io.IOException;
import java.io.InputStream;

import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.camel.http.common.HttpMessage;
import org.apache.commons.io.IOUtils;

/**
* 这个处理器用来完成输入的json格式的转换
* 
*/
public class HttpProcessor implements Processor {

	@Override
	public void process(Exchange exchange) throws Exception {
			// 因为很明确消息格式是http的,所以才使用这个类
			// 否则还是建议使用org.apache.camel.Message这个抽象接口
			HttpMessage message = (HttpMessage) exchange.getIn();
			InputStream bodyStream = (InputStream) message.getBody();
			String inputContext = this.analysisMessage(bodyStream);
			bodyStream.close();

	// 存入到exchange的out区域
	if (exchange.getPattern() == ExchangePattern.InOut) {
			Message outMessage = exchange.getOut();
			outMessage.setBody(inputContext + " || out");
//			System.out.println(outMessage.getBody());
	}
	}

	/**
	 * 从stream中分析字符串内容
	 * 
	 * @param bodyStream
	 * @return
	 */
	private String analysisMessage(InputStream bodyStream) throws IOException {

	String responseStr = IOUtils.toString(bodyStream, "UTF-8");

//		System.out.println(responseStr);

	return responseStr;
	}
}

下面这个是以前测试HTTP服务的代码,直接拿来用了..

代码三:

package com.test.client.http;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.nio.charset.Charset;

public class HttpClient {

	public static final String CODEFORMAT = "UTF-8";

	public static String doPost(String requestBody, int timeout, HttpURLConnection http) throws Exception {
		String retResult = "";
		try {
			// 设置是否从HttpURLConnection读入 ,默认是true
			http.setDoInput(true);
			// post请求的时候需要将DoOutput 设置成true 参数要放在http正文内,因此需要设为true ,默认是false
			http.setDoOutput(true);
			// post请求UseCaches 设置成false 不能设置缓存
			http.setUseCaches(false);
			// 连接主机超时时间
			http.setConnectTimeout(timeout);
			// 从主机读取数据超时 (都是毫秒)
			http.setReadTimeout(timeout);
			// 默认是get
			http.setRequestMethod("POST");
			http.setRequestProperty("accept", "*/*");
			http.setRequestProperty("connection", "Keep-Alive");
			http.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
			// 参数设置完成之后进行连接
			http.connect();
			OutputStreamWriter osw = new OutputStreamWriter(http.getOutputStream(), Charset.forName("UTF-8"));
			osw.write(requestBody);
			osw.flush();
			osw.close();
			if (http.getResponseCode() == 200) {
					BufferedReader in = new BufferedReader(new InputStreamReader(http.getInputStream(), Charset.forName("UTF-8")));
					String inputLine;
					while ((inputLine = in.readLine()) != null) {
							retResult += inputLine;
					}
					in.close();
			} else {
					throw new Exception("the http.getResponseCode() is " + http.getResponseCode());
			}
		} catch (Exception e) {
				e.printStackTrace();
		} finally {
				if (http != null) {
						http.disconnect();
						http = null;
				}
		}
			return retResult;
	}
}

代码四:

package com.test.client.http;

import java.net.HttpURLConnection;
import java.net.URL;

import org.json.JSONObject;

public class TestClient {

	public static void main(String[] args) {
		URL url = null;
		HttpURLConnection http = null;

	try {

	url = new URL("http://0.0.0.0:8282/doHelloWorld");

	for (int i = 0; i < 1; i++) {
			System.out.println("http post start !!!");
			Long startTime = System.currentTimeMillis();

	http = (HttpURLConnection) url.openConnection();

	// ************************************************************
	JSONObject authorityJson = new JSONObject();
	authorityJson.put("userid", "222222222222222"); // 用户身份证号码
	authorityJson.put("username", "VIP_USER");// 用户姓名
	authorityJson.put("userdept", "VIP");// 用户单位

	JSONObject queryInfoJson = new JSONObject();
	queryInfoJson.put("source", "60155");// 测试用
	queryInfoJson.put("condition", "FIRSTKEY = '320103671118051'");
	queryInfoJson.put("starttime", "");
	queryInfoJson.put("endtime", "");

	JSONObject requestJson = new JSONObject();
	requestJson.put("authority", authorityJson);
	requestJson.put("queryInfo", queryInfoJson);
	// ************************************************************

	StringBuffer sb = new StringBuffer();
	sb.append(requestJson.toString());

	String result = HttpClient.doPost(sb.toString(), 30000000, http);

	System.out.println("http post end cost :" + (System.currentTimeMillis() - startTime) + "ms");
	System.out.println(result);

	Thread.sleep(500);
	}

	} catch (Exception e) {
			e.printStackTrace();
	}

	}
}

代码五:

 

#####输出到控制台#####
log4j.rootLogger=DEBUG,CONSOLE,ARKSERVICES
log4j.addivity.org.apache=true
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %p %l - %m%n

#####输出到文件#####
log4j.appender.ARKSERVICES=org.apache.log4j.RollingFileAppender
log4j.appender.ARKSERVICES.File=../log/camel-test.log
log4j.appender.ARKSERVICES.Threshold=DEBUG
log4j.appender.ARKSERVICES.MaxBackupIndex=5
log4j.appender.ARKSERVICES.MaxFileSize=100MB
log4j.appender.ARKSERVICES.layout=org.apache.log4j.PatternLayout
log4j.appender.ARKSERVICES.layout.ConversionPattern=%d %t %p %l - %m%n

log4j.logger.org.eclipse.jetty=OFF

上述代码是一个完整可运行的测试样例,可以直接拿来使用。

它展示了一个简单的可以实际运行的消息路由规则:

首先from语句中填写的"jetty:http://0.0.0.0:8282/doHelloWorld",表示这个编排好的路由的消息入口。

它使用HTTP传输协议,访问本物理节点上任何IP(127.0.0.0或192.168.1.1),在端口8282上的请求,都可以将HTTP携带的消息传入这个路由。

接下来消息会在HttpProcessor这个自定义的处理器中进行转换。

为了看清原理,HttpProcessor中的消息转换很简单,在HTTP传入的JSON字符串的末尾,加上一个" ||out",并进行输出。

Apache Camel中自带了很多的处理器,并且可以自行实现Processor接口来实现自己的处理逻辑。

最后,消息被传输到一个endPoint控制端点,这个endPoint控制端点的URI描述(log:helloworld?showExchangeId=true),表明它是一个Log4j的实现,

所以消息最终会以Log日志的方式输出到控制台上,到此,这个编排的路由就执行完了。

 

Apache Camel Endpoint同时发布多个服务

好奇,测试一下,Camel能不能同时发布多个服务。

代码一:

package com.camel.directcamel2;

import java.io.InputStream;

import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.http.common.HttpMessage;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.model.ModelCamelContext;
import org.apache.commons.io.IOUtils;
import org.apache.log4j.PropertyConfigurator;

/**
* 模拟同时,发布两个http服务,不同的url,处理不同的业务逻辑
* 
* @author CYX
* @time 2017年12月15日下午3:09:27
*/
public class DirectCamel {

	public static void main(String[] args) throws Exception {

	// 加载日志
	PropertyConfigurator.configure("./conf/log4j.properties");
	PropertyConfigurator.configureAndWatch("./conf/log4j.properties", 1000);

	// 这是camel上下文对象,整个路由的驱动全靠它了。
	ModelCamelContext camelContext = new DefaultCamelContext();

	// 启动route
	camelContext.start();

	// 首先将两个完整有效的路由注册到Camel服务中
	camelContext.addRoutes(new RouteBuilder() {

	@Override
	public void configure() throws Exception {

	// 连接路由:DirectRouteB
	from("jetty:http://0.0.0.0:8282/directCamelaa").process(new Processor() {

	@Override
	public void process(Exchange exchange) throws Exception {

	// 因为很明确消息格式是http的,所以才使用这个类
	// 否则还是建议使用org.apache.camel.Message这个抽象接口
	HttpMessage message = (HttpMessage) exchange.getIn();
	InputStream bodyStream = (InputStream) message.getBody();
	String inputContext = IOUtils.toString(bodyStream, "UTF-8");

	System.out.println("A inputContext -- " + inputContext);

	bodyStream.close();

	// 存入到exchange的out区域
	if (exchange.getPattern() == ExchangePattern.InOut) {
			Message outMessage = exchange.getOut();
			outMessage.setBody(inputContext + " || aaa");
	}

	}
	}).to("log:directRouteARouteBuilder?showExchangeId=true");

	}
	});

	camelContext.addRoutes(new RouteBuilder() {

	@Override
	public void configure() throws Exception {
			from("jetty:http://0.0.0.0:8282/directCamelbb").process(new Processor() {

	@Override
	public void process(Exchange exchange) throws Exception {

	// 因为很明确消息格式是http的,所以才使用这个类
	// 否则还是建议使用org.apache.camel.Message这个抽象接口
	HttpMessage message = (HttpMessage) exchange.getIn();
	InputStream bodyStream = (InputStream) message.getBody();
	String inputContext = IOUtils.toString(bodyStream, "UTF-8");

	System.out.println("B inputContext  -- " + inputContext);

	// 存入到exchange的out区域
	if (exchange.getPattern() == ExchangePattern.InOut) {
			Message outMessage = exchange.getOut();
			outMessage.setBody(bodyStream + " || outbbbb");
	}

	}
	}).to("log:directRouteBRouteBuilder?showExchangeId=true");
	}
	});

	// 通用没有具体业务意义的代码,只是为了保证主线程不退出
	synchronized (DirectCamel.class) {
			DirectCamel.class.wait();
	}

	}
}

测试、代码二:

 

package com.test.client.directcamel2;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.nio.charset.Charset;

public class HttpClient {

	public static final String CODEFORMAT = "UTF-8";

	public static String doPost(String requestBody, int timeout, HttpURLConnection http) throws Exception {
		String retResult = "";
		try {
			// 设置是否从HttpURLConnection读入 ,默认是true
			http.setDoInput(true);
			// post请求的时候需要将DoOutput 设置成true 参数要放在http正文内,因此需要设为true ,默认是false
			http.setDoOutput(true);
			// post请求UseCaches 设置成false 不能设置缓存
			http.setUseCaches(false);
			// 连接主机超时时间
			http.setConnectTimeout(timeout);
			// 从主机读取数据超时 (都是毫秒)
			http.setReadTimeout(timeout);
			// 默认是get
			http.setRequestMethod("POST");
			http.setRequestProperty("accept", "*/*");
			http.setRequestProperty("connection", "Keep-Alive");
			http.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
			// 参数设置完成之后进行连接
			http.connect();
			OutputStreamWriter osw = new OutputStreamWriter(http.getOutputStream(), Charset.forName("UTF-8"));
			osw.write(requestBody);
			osw.flush();
			osw.close();
			if (http.getResponseCode() == 200) {
					BufferedReader in = new BufferedReader(new InputStreamReader(http.getInputStream(), Charset.forName("UTF-8")));
					String inputLine;
					while ((inputLine = in.readLine()) != null) {
							retResult += inputLine;
					}
					in.close();
			} else {
					throw new Exception("the http.getResponseCode() is " + http.getResponseCode());
			}
		} catch (Exception e) {
				e.printStackTrace();
		} finally {
				if (http != null) {
						http.disconnect();
						http = null;
				}
		}
			return retResult;
	}
}

测试、代码三:

 

package com.test.client.directcamel2;

import java.net.HttpURLConnection;
import java.net.URL;

import org.json.JSONObject;

public class TestClient {

	public static void main(String[] args) {
			URL url = null;
			HttpURLConnection http = null;

	try {

//			url = new URL("http://0.0.0.0:8282/directCamelaa");
	url = new URL("http://0.0.0.0:8282/directCamelbb");

	for (int i = 0; i < 1; i++) {
			System.out.println("http post start !!!");
			Long startTime = System.currentTimeMillis();

	http = (HttpURLConnection) url.openConnection();

	// ************************************************************
	JSONObject authorityJson = new JSONObject();
	authorityJson.put("userid", "222222222222222"); // 用户身份证号码
	authorityJson.put("username", "VIP_USER");// 用户姓名
	authorityJson.put("userdept", "VIP");// 用户单位

	JSONObject queryInfoJson = new JSONObject();
	queryInfoJson.put("source", "60155");// 测试用
	queryInfoJson.put("condition", "FIRSTKEY = '320103671118051'");
	queryInfoJson.put("starttime", "");
	queryInfoJson.put("endtime", "");

	JSONObject requestJson = new JSONObject();
	requestJson.put("authority", authorityJson);
	requestJson.put("queryInfo", queryInfoJson);
	// ************************************************************

	StringBuffer sb = new StringBuffer();
	sb.append(requestJson.toString());
	System.out.println(sb.toString());

	String result = HttpClient.doPost(sb.toString(), 30000000, http);

	System.out.println("http post end cost :" + (System.currentTimeMillis() - startTime) + "ms");
	System.out.println(result);

	Thread.sleep(500);
	}

	} catch (Exception e) {
			e.printStackTrace();
	}

	}
}

切换两个URL之后的输出结果:

 

A inputContext -- {"authority":{"userdept":"VIP","userid":"222222222222222","username":"VIP_USER"},"queryInfo":{"condition":"FIRSTKEY = '320103671118051'","endtime":"","source":"60155","starttime":""}}

[2017-12-15 17:09:44,710] [qtp192428201-19] [DEBUG] [org.apache.camel.processor.SendProcessor.process(SendProcessor.java:141)] - >>>> log://directRouteARouteBuilder?showExchangeId=true Exchange[ID-CYX-49644-1513328973453-0-1]

[2017-12-15 17:09:44,725] [qtp192428201-19] [INFO] [org.apache.camel.util.CamelLogger.log(CamelLogger.java:159)] - Exchange[Id: ID-CYX-49644-1513328973453-0-1, ExchangePattern: InOut, BodyType: String, Body: {"authority":{"userdept":"VIP","userid":"222222222222222","username":"VIP_USER"},"queryInfo":{"condition":"FIRSTKEY = '320103671118051'","endtime":"","source":"60155","starttime":""}} || aaa]

[2017-12-15 17:09:44,725] [qtp192428201-19] [DEBUG] [org.apache.camel.http.common.DefaultHttpBinding.doWriteDirectResponse(DefaultHttpBinding.java:489)] - Streaming response in chunked mode with buffer size 32768

 

 

B inputContext  -- {"authority":{"userdept":"VIP","userid":"222222222222222","username":"VIP_USER"},"queryInfo":{"condition":"FIRSTKEY = '320103671118051'","endtime":"","source":"60155","starttime":""}}

[2017-12-15 17:10:22,355] [qtp192428201-21] [DEBUG] [org.apache.camel.processor.SendProcessor.process(SendProcessor.java:141)] - >>>> log://directRouteBRouteBuilder?showExchangeId=true Exchange[ID-CYX-49644-1513328973453-0-4]

[2017-12-15 17:10:22,355] [qtp192428201-21] [INFO] [org.apache.camel.util.CamelLogger.log(CamelLogger.java:159)] - Exchange[Id: ID-CYX-49644-1513328973453-0-4, ExchangePattern: InOut, BodyType: String, Body: org.apache.camel.converter.stream.InputStreamCache@569e9cb3 || outbbbb]

[2017-12-15 17:10:22,355] [qtp192428201-21] [DEBUG] [org.apache.camel.http.common.DefaultHttpBinding.doWriteDirectResponse(DefaultHttpBinding.java:489)] - Streaming response in chunked mode with buffer size 32768

 

 

camel-cxf调用和发布webservice例子 用camel-cxf调用webservice和发布一个webservice接口例子,首先启动QueryServiceMain主函数启动webservice接口,然后启动测试类TestWebservice。例子主要是实现java代码实现camel调用webservice接口 立即下载

相关推荐

apache-camel-nanpa:演示如何通过HTTP从ZIP文件中提取数据,如何处理内部数据并将其作为JSON提供

apache-camel-nanpa 该项目从nanpa.com获取有关在美国分配的电话交换机的数据,然后提供一个简单的REST接口以JSON格式获取该数据。 您可以通过简单地运行以下路线来启动路线: mvn clean compile exec:java 在您的控制台中,您应该看到一些GuiceCamelContext消息,然后是如下所示的消息块: INFO: Starting the internal [HTTP/1.1] server on port 8000 [ttison.CamelApplication.main()] GuiceCamelContext INFO Route: route3 started and consuming from: Endpoint[http://Controls-MacBook-Pro.local:800

Apache Camel http

为什么80%的码农都做不了架构师?>>> ...

weixin_33752045的博客 490

基于oopsHttpApi的小栗子机器人Python插件开发框架.zip

基于oopsHttpApi的小栗子机器人Python插件开发框架.zip

Apache Camel框架之HTTP路由

继介绍完Camel如何处理FTP,JMS接口之后,今天介绍一下系统集成的时候经常遇到的另一个接口,HTTP,一个示例需求如下图所示:(图片来源于Camel in Action) 本文给出一个简单的代码示例如何用Camel来实现这样一个应用: 1,在一个JAVA类里配置如下路由:这里只示例了HTTP的部分,其他功能实现可以参见Apache Camel框架系列的其他博客.public cl

交换一个思想,能得到俩思想 1万+

AMCL实战:如何用2D激光雷达在ROS中实现稳定重定位(附参数调优指南)

本文深入解析了在ROS中使用2D激光雷达实现稳定AMCL重定位的实战技巧与参数调优指南。针对粒子发散、位姿跳变等常见问题,文章从算法核心原理出发,系统讲解了初始化、粒子滤波、运动与观测模型等关键参数的分类与调优策略,并提供了一套经过验证的调优框架,帮助开发者提升移动机器人在已知地图环境下的定位鲁棒性和稳定性。

sql99的博客 134

微信小程序URL Link全解析:从生成原理到实战应用(附Java代码)

本文深入解析微信小程序URL Link的生成原理与实战应用。URL Link是微信官方提供的智能路由协议,通过中间页实现外部链接安全跳转至小程序指定页面。文章详细阐述了其权限模型、环境版本差异及跳转机制,并提供了包含令牌管理、异常处理和性能优化的健壮Java实现方案,助力开发者构建高可用的链接生成服务。

weixin_29327525的博客 1216

Apache Camel - 8 - Camel特殊的Endpoint

Apache Camel 特殊的Endopint Direct Apache Camel相关代码已经上传GitHub,需要的自取:GitHub - Apache Camel 完整Demo 如果觉得还行,麻烦点个Star Endpoint Direct用于在两个编排好的路由之间实现Exchange消息的连接; 上一个路由中由最后一个元素处理完的Exchange对象,将被发送至由Dire...

Simba_cheng的博客 3484

工业组态软件Intouch(单机版)入门{第一篇}

通俗来讲Intouch就是一个能将PLC里的信号显示在画面上的软件。

weixin_41571357的博客 1万+

Apache Camel - 0.5 - SOA与ESB

SOA Apache Camel相关代码已经上传GitHub,需要的自取:GitHub - Apache Camel 完整Demo 如果觉得还行,麻烦点个Star   SOA是一种架构思想,主要围绕多个"服务"如何进行集成以达到某种目的。   SOA中服务的定义是什么呢? 在业务系统中被发布出来供用户使用,能完成一个完整业务过程的功能,就是服务。   服务着眼于完整的业务 ...

Simba_cheng的博客 3883

枚举 ACS 电机状态位 完全解析

本文解析了ACS运动控制器SDK中的MotorStates枚举,该枚举对应控制器状态标志位?MFLAGS。主要介绍了6个核心状态:ACSC_ALL(-1)表示所有轴,ACSC_NONE(0)为空闲状态,ACSC_MST_ENABLE(1)为轴使能,ACSC_MST_INPOS(16)表示到位,ACSC_MST_MOVE(32)为运动中,ACSC_MST_ACC(64)为加速中。文章还补充了完整的枚举定义,包含报警、回零等状态,并提供了在晶圆AOI4轴运动中的典型应用场景,如判断轴状态、运动条件等。最后强调只

StevenChen的博客 245

Windows 11 安装、使用 Git:下载、安装、概念、命令、分支模型

本文详细介绍了在 Windows 11 系统上安装与使用 Git 的完整流程,涵盖从官方或国内镜像下载安装包、关键安装选项配置,到 Git 核心概念(如工作区、暂存区、分支、远程仓库等)的通俗解释。同时梳理了常用命令与五种主流 Git 分支模型(如 Git Flow、GitHub Flow 等),帮助开发者根据项目规模选择合适的工作流,是面向初学者与进阶用户的实用指南。

寒水馨 · 轻量级技术文档 · hanshuixin.org 2387

Apache Camel 中使用HTTP服务端和groovy 脚本重新封装并发布HTTP接口

把json的入参传入,转换成map,这里用了cn.hutool.http包的方法,包支持传入form(map)参数,用map格式请求接口,map相当于是json和xml的一个中转格式,注意把代码里的String url = "http://ip:port/jcjy/V1.0/api/sys/submitAccept" 这段换成自己项目里第三方的接口地址。1.楼主负责的项目,公司程序对外的API接口入出参什么都是标准化固定了。比如固定的是json的入参格式,但是第三方提供的接口入参要求却是xml的格式。

q3217268的博客 1123

多智能体强化学习算法【三】【QMIX、MADDPG、MAPPO】

相关文章: 1.QMIX算法简述 QMIX是一个多智能体强化学习算法,具有如下特点: 1. 学习得到分布式策略。 2. 本质是一个值函数逼近算法。 3. 由于对一个联合动作-状态只有一个总奖励值,而不是每个智能体得到一个自己的奖励值,因此只能用于合作环境,而不能用于竞争对抗环境。 4. QMIX算法采用集中式学习,分布式执行应用的框架。通过集中式的信息学习,得到每个智能体的分布式策略。 5. 训练时借用全局状态信息来提高算法效果。是后文提到的VDN方法的改进。 6. 接上一条,QMIX设计一个神经网络来

丨汀、的博客 5470

Apache camel集成引擎发布HTTP接口,利用分支节点,根据不同的入参进行跨数据库查询数据的路由设置

黑色标号的2和3两个JDBC节点访问的数据库不同,标号2的JDBC节点访问的是oracle数据库,标号3的JDBC节点访问的是sqlserver数据库。2.入参json格式如下,分支节点的目的是当fvisitordno入参有值时候走路由上面一条线,查询对应入参范围的值,如果fvisitordno入参无值时,走路由的下面一条线。8.灰色标号4的groovy节点脚本如下,将黑色标号3JDBC节点集出来的数据处理成map输出。3.获取ID节点采用groovy代码,获取上json入参中的三个参数,设置为消息头。

q3217268的博客 642

【华为OD机试】2024年真题C卷(python)-API集群负载统计

【华为OD机试】-API集群负载统计-【华为OD机试】-API集群负载统计:某个产品的 restful API 集合部署在服务器集群的多个节点上,近期对客户端访问日志进行了采集,需要统计各个API的访问频次,根据热点信息在服务器节点之间做负载均衡,现在需要实现热点信息统计查询功能。 restful API 是由多个层级构成,层级之间使用/连接,如 A/B/C/D 这个地址,A属于第一级,B属于第二级,C属于第三级,D属于第四级。 现在负载均衡模块需要知道给定层级上某个名字出现的频次,未出现过用0

u014481728的博客 1491

使用Python爬虫抓取政府网站政务信息:公告、通知的自动化抓取与分析

通过结合Requests、BeautifulSoup、Selenium等技术,你能够高效地抓取政府网站的数据,并通过MySQL存储与Pandas分析这些数据。通过自动化手段抓取这些信息,不仅可以提高数据收集的效率,还能够实时获取最新的政务动态,为政策研究、舆情分析等提供宝贵数据。我们将通过Python的Requests、BeautifulSoup、Selenium等工具,结合最新的技术实现一个完整的爬虫系统,帮助你轻松抓取并分析政务信息。通过爬虫,我们可以自动化地从指定网站上抓取公告、新闻、通知等信息。

2201_76125261的博客 1907

camel 调用远程http接口

camel 调用远程http 接口 实现maven 依赖&lt;dependency&gt; &lt;groupId&gt;org.apache.camel&lt;/groupId&gt; &lt;artifactId&gt;camel-core&lt;/artifactId&gt; &lt;version&gt;2.22.0...

在路上 7537

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

springboot 整合 apache camel实现企业级数据集成和处理

Apache Camel是一个集成框架,它具有用于集成各种应用程序的编程模型。 对于需要在不同的微服务和其他上下游系统(如数据库和消息传递系统)之间进行通信的微服务体系结构,它非常适合。 在本文中,我们将在代码示例的帮助下,使用Apache Camel在用Spring Boot构建的微服务应用程序中构建集成逻辑。 Apache Camel 介绍 如开始所述,Apache Camel是一个集成框架。camel可以做到: 路由:将数据有效负载(也称为“消息”)从源系统发送到目标系统 中介:消息处理,如基于一个

程序员石磊 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Apache Camel源码研究之Rest

以Camel2.24.3 + SpringBoot2.x 为基础简单解读Camel中的Rest组件的源码级实现逻辑。

夫礼者的专栏 1883

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Camel——http4组件https使用

Camel——http4组件https使用 camel配置pom文件 &lt;dependency&gt; &lt;groupId&gt;org.apache.camel&lt;/groupId&gt; &lt;artifactId&gt;camel-http4&lt;/artifactId&gt; &lt;version&gt;2.17.1&lt;/version&gt; &

CJ_66的博客 3921

Camel实战第二版 第二章 Camel路由

目录 第一部分:迈出第一步 第一章:初识Camel 第二章:Camel路由 本章包含: Camel路由介绍 引入“骑手摩配”场景 FTP和JMS端点基础用法 使用Java DSL创建路由 在XML中定义路由 在路由中使用EIP Camel的最重要的特性是路由,没有路由,Camel就只是一个传输连接库。在本章中,你将深入了解如何使用Camel路由数据。 在日常生活中,路由的理念无处不在。例如,你寄出一封信,辗转好几个城市,最终到达目的地;发送的电子邮件,在到达目的地之前,也会经过多个

xiaokanfuchen86的博客 3177

基于camel的http接口开发

1、spring-camel.xml <camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring"> <restConfiguration bindingMode="auto" component="restlet" port="8080" /> <!--...

linge-的博客 2450

Apache Camel与Spring Boot集成开发HTTP接口转发功能问题

公司目前有个功能需要,需要使用Springboot+Apache Camel的Rest组件集成实现类似ESB(服务总线的功能),使用的配置方式是xml dsl,配置信息如下:但由于本人之前没有怎么深入了解过Apache Camel的使用,在调用目前的服务的过程中,出现以下的错误信息: com.fasterxml.jackson.databind.JsonMappingException: No s...

mangguochang的专栏 4408

使用Apache Camel处理web service请求的三种方法

一: 首先写一个接口,用来发布web service package com.pp.ws; import javax.jws.WebMethod; import javax.jws.WebService; /** * 计算器接口 */ @WebService public interface Calculator { @WebMethod public String getVer

走马行酒醴,驱车布鱼肉 9565

Apache Camel 3 –新增功能前10名

Apache Camel 3于2019年11月28日星期四发布,也正是美国感恩节这一天。 这不是故意的,但我们可以向社区提供了一个全新的主要版本的Camel,这是我们的极大感谢–这并不经常发生。 实际上,距离骆驼2上街已经10年了。 因此,第三代早就该了。 这篇博客文章重点介绍了骆驼v3中值得注意的新功能和改进。 1)骆驼现在是一个项目家族 Apache Camel现在是一个项目...

最佳 Java 编程 769
上一篇: Apache Camel - 2 - Camel小栗子(File)
下一篇: Apache Camel - 4 - Camel元素
Simba_cheng
博客等级 码龄11年 250粉丝 203原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值