8000 pass http headers in message header meta fields · github1/meshage@9b4ef65 · GitHub
[go: up one dir, main page]

Skip to 8000 content

Commit 9b4ef65

Browse files
github1github1
authored andcommitted
pass http headers in message header meta fields
1 parent cf93067 commit 9b4ef65

File tree

6 files changed

+19
-7
lines changed

6 files changed

+19
-7
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "meshage",
3-
"version": "0.3.101",
3+
"version": "0.3.103",
44
"description": "A simple peer-to-peer service mesh for HTTP based message handlers. Messages sent within the service mesh are consistently partitioned across members of the cluster.",
55
"main": "./src/index.js",
66
"types": "./src/index.d.ts",
@@ -18,7 +18,7 @@
1818
"author": "John Collier <john.collier4@gmail.com>",
1919
"license": "MIT",
2020
"dependencies": {
21-
"@github1/grapevine": "0.3.101",
21+
"@github1/grapevine": "0.3.103",
2222
"body-parser": "^1.17.2",
2323
"consul": "^0.33.1",
2424
"debug": "^3.0.1",

src/core/message.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ export interface MessageHeader {
22
readonly serviceId? : string;
33
readonly stream : string;
44
readonly partitionKey : string;
5+
readonly meta? : { [key : string] : string };
56
}
67

78
export interface Message extends MessageHeader {

src/core/service-router.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ const headerOnly = (message : Message) : MessageHeader => {
8484
return {
8585
serviceId: message.serviceId,
8686
stream: message.stream,
87-
partitionKey: message.partitionKey
87+
partitionKey: message.partitionKey,
88+
meta: message.meta
8889
};
8990
};
9091

src/messaging/http/http-message-listener.test.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ createTest('HttpMessageListener',
1212
async (router, message) =>
1313
(await postP(`http://localhost:${router.port}/api/broadcast/${message.stream}/${message.partitionKey}`)).body,
1414
(routers) => {
15+
it('passes http headers as meta fields', async () => {
16+
const body = (await postP(`http://localhost:${routers['router-a'].port}/api/some-stream/123`)).body;
17+
expect(body.message).toContain('user-agent=node-superagent/3.8.3');
18+
});
1519
it('lists services', async () => {
1620
const res = await getP(`http://localhost:${routers['router-a'].port}/api/services`);
1721
expect(res.body.length).toBe(2);

src/messaging/http/http-message-listener.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,12 @@ export class HttpMessageListener extends NetworkMessageRouterListener {
4848
stream,
4949
partitionKey,
5050
serviceId: req.get('X-Service-ID'),
51-
data: body
51+
data: body,
52+
meta: Object.keys(req.headers)
53+
.reduce((meta : { [key : string] : string }, header : string) => {
54+
meta[header] = req.header(header);
55+
return meta;
56+
}, {})
5257
};
5358
const isBroadcast : boolean = /broadcast/.test(req.path);
5459
log('Handling message', message);
@@ -59,7 +64,7 @@ export class HttpMessageListener extends NetworkMessageRouterListener {
5964
} catch (err) {
6065
logError(err);
6166
res.status(500)
62-
.json({error: (<Error> err).message});
67+
.json({error: (<Error>err).message});
6368
}
6469
};
6570

@@ -69,7 +74,7 @@ export class HttpMessageListener extends NetworkMessageRouterListener {
6974
} catch (err) {
7075
logError(err);
7176
res.status(500)
72-
.json({error: (<Error> err).message});
77+
.json({error: (<Error>err).message});
7378
}
7479
});
7580
app.all('/api/health', (req : express.Request, res : express.Response) => {

src/messaging/message-listener-test-helper.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ exports.createTest = (name,
2020
await router.register({
2121
stream: 'some-stream',
2222
messageHandler: (data, header) => {
23-
return {message: `hello from ${routerName}`, header};
23+
const metaStr = header.meta ? `: ${Object.keys(header.meta).map((key) => `${key}=${header.meta[key]}`)}` : '';
24+
return {message: `hello from ${routerName}${metaStr}`, header};
2425
}
2526
});
2627
}

0 commit comments

Comments
 (0)
0