Skip to content

Commit

Permalink
Support micrometer context-propagation : Skeleton code
Browse files Browse the repository at this point in the history
  • Loading branch information
chickenchickenlove committed Apr 8, 2024
1 parent db3973d commit faffdd6
Show file tree
Hide file tree
Showing 10 changed files with 908 additions and 0 deletions.
1 change: 1 addition & 0 deletions reactor3/build.gradle
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
dependencies {
api libs.reactor.core
implementation 'io.micrometer:context-propagation:1.1.1'
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.linecorp.armeria.common.reactor3;

import java.util.Objects;

import com.linecorp.armeria.common.RequestContext;
import com.linecorp.armeria.internal.common.RequestContextUtil;

import io.micrometer.context.ThreadLocalAccessor;

public class RequestContextAccessor implements ThreadLocalAccessor<RequestContext> {

private static final String KEY = "ARMERIA_REQUEST_CONTEXT";
private static final RequestContextAccessor instance = createInstance();

private static RequestContextAccessor createInstance() {
return new RequestContextAccessor();
}

public static RequestContextAccessor getInstance() {
return instance;
}

private RequestContextAccessor() {
}

@Override
public Object key() {
return KEY;
}

@Override
public RequestContext getValue() {
return RequestContextUtil.get();
}

@Override
public void setValue(RequestContext value) {
RequestContextUtil.getAndSet(value);
}

@Override
public void setValue() {
// NO Operation.
}

@Override
public void restore(RequestContext previousValue) {
RequestContextUtil.getAndSet(previousValue);
}

@Override
public void restore() {
RequestContextUtil.pop();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.linecorp.armeria.common.reactor3;


import io.micrometer.context.ContextRegistry;
import reactor.core.publisher.Hooks;

public class RequestContextPropagationHook {

private static boolean enabled;

public static synchronized void enable() {
if (enabled) {
return;
}
ContextRegistry.getInstance().registerThreadLocalAccessor(RequestContextAccessor.getInstance());
Hooks.enableAutomaticContextPropagation();

enabled = true;
}

public static boolean isEnable() {
return enabled;
}

public static synchronized void disable() {
if (!enabled) {
return;
}

Hooks.disableAutomaticContextPropagation();
enabled = false;
}
}

0 comments on commit faffdd6

Please sign in to comment.