cloudevents 学习二 java 代码集成试用

摘要:
xmlversion="1.0"encoding="UTF-8"?

主要是测试cloudevents 与java 的集成(client 使用nodejs)

nodejs client

const axios = require("axios").default;
const { emitterFor, Mode, HTTP,CloudEvent } = require("cloudevents");
const type = "userlogin"
const source = "itmd_cust"
const subject = "demo"
const datacontenttype = "application/json"
const data  = {
name:"dalongdemo",
age:333
}
const ce = new CloudEvent({ type, source, data:data ,datacontenttype,subject });
const message = HTTP.binary(ce); // Or HTTP.structured(ce)
console.log(message.headers)
function sendWithAxios2(message) {
// Do what you need with the message headers
// and body in this function, then send the
// event
axios({
method: "post",
url: "http://localhost:8080/echo2",
data: message.body,
headers: message.headers,
});
}
const emit2 = emitterFor(sendWithAxios2, { mode: Mode.BINARY });
emit2(ce);

java 集成

主要集成了spring jackson

  • pom 文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.dalong</groupId>
<artifactId>batchapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>batchapp</name>
<description>mybatch app</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.156</version>
</dependency>
<dependency>
<groupId>io.cloudevents</groupId>
<artifactId>cloudevents-json-jackson</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>io.cloudevents</groupId>
<artifactId>cloudevents-http-basic</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>io.cloudevents</groupId>
<artifactId>cloudevents-spring</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
  • convert 配置
    CloudEventHandlerConfiguration
@Configuration
public class CloudEventHandlerConfiguration implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(0,new CloudEventHttpMessageConverter());
}
}
  • controller 定义
package com.dalong.batchapp;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.cloudevents.CloudEvent;
import io.cloudevents.core.builder.CloudEventBuilder;
import io.cloudevents.core.data.PojoCloudEventData;
import io.cloudevents.jackson.PojoCloudEventDataMapper;
import io.cloudevents.spring.http.CloudEventHttpUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;
import java.net.URI;
import java.util.UUID;
import static io.cloudevents.core.CloudEventUtils.mapData;
@RestController
public class EventController {
private static final  ObjectMapper objectMapper  = new ObjectMapper();
@PostMapping("/echo2")
public void ce(@RequestBody CloudEvent event) {
//  此处集成jackson 以及cloudevent 数据格式,方便消息体处理
CloudEvent event1 = CloudEventBuilder.from(event)
.withId(UUID.randomUUID().toString())
.withSource(URI.create("https://spring.io/foos"))
.withType("io.spring.event.Foo")
.withData(event.getData().toBytes())
.build();
PojoCloudEventData<MyUser> cloudEventData = mapData(
event,
PojoCloudEventDataMapper.from(objectMapper,MyUser.class)
);
MyUser user = cloudEventData.getValue();
System.out.println(user.toString());
}
@PostMapping("/echo")
public ResponseEntity<MyUser> echo(@RequestBody MyUser foo, @RequestHeader HttpHeaders headers) {
CloudEvent attributes = CloudEventHttpUtils.fromHttp(headers)
.withId(UUID.randomUUID().toString())
.withSource(URI.create("https://spring.io/foos"))
.withType("io.spring.event.Foo")
.build();
System.out.println(foo.toString());
System.out.println(headers.toString());
HttpHeaders outgoing = CloudEventHttpUtils.toHttp(attributes);
return ResponseEntity.ok().headers(outgoing).body(foo);
}
}

效果

  • node client

cloudevents 学习二 java 代码集成试用第1张

  • spring boot 消息

cloudevents 学习二 java 代码集成试用第2张

参考资料

https://stackoverflow.com/questions/3907929/should-i-declare-jacksons-objectmapper-as-a-static-field
https://cloudevents.github.io/sdk-java/json-jackson.html
https://cloudevents.io/
https://cloudevents.github.io/sdk-java/http-basic.html
https://cloudevents.github.io/sdk-java/spring.html

免责声明:文章转载自《cloudevents 学习二 java 代码集成试用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇robot framework学习笔记之二———变量C/C++头文件一览下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

AutoCAD ObjectARX和RealDWG的基本数据操作

.dwg文件的读取。拥有RealDWG或者ObjectARX不必多说。 安装RealDWG后RealDWG目录下的Samples看看。 新建工程配置好Inc,Lib,附加依赖等。 不必多说。 需要将AcDbHostApplicationServices实现一遍。 sample自带的即可,也可自己按照自己的来写。 1 int Verbose = 0...

C/C++文件输入输出操作——FILE*、fstream、windowsAPI

基于C的文件操作在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。 一、流式文件操作这种方式的文件操作有一个重要的结构FILE,FILE在头文件stdio.h中定义如下: typedef struct {int level;unsigned flags;char fd;unsigned char hold;int...

cppcheck,代码简单分析,以及实现一个简单的模块

经过半天的分析和了解,大致明白了这个工具的使用方法和原理。 这个工具,会将一个源文件(目前我是用单一源文件测试的,没有使用目录测试), 每一个有效符号或者元素都解析出来,之后储存在一个大list里面,供后续模块检测时使用, 但是一些特殊的元素,不会被列入list,如调用约定(__stdcall 此类等等),其他应该还有,但是还没使用到, 目前看到的情况是,...

Android深入浅出之 AudioTrack分析

Android深入浅出之Audio 第一部分 AudioTrack分析 一 目的 本文的目的是通过从Audio系统来分析Android的代码,包括Android自定义的那套机制和一些常见类的使用,比如Thread,MemoryBase等。 分析的流程是: l         先从API层对应的某个类开始,用户层先要有一个简单的使用流程。 l        ...

GeeTest 极验验证

 前台Html页面 <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> <script src="http://static.geetest.com/static/tools/gt.js"></script>...

taro教程

taro适配多端 介绍Taro是一套遵循 React 语法规范的多端统一开发框架 多端统一开发框架,支持用 React 的开发方式编写一次代码,生成能运行在微信小程序、H5、React Native 等的应用。 Taro 是一套遵循 React 语法规范的 多端开发 解决方案。现如今市面上端的形态多种多样,Web、React-Native、微信小程序等各种...