рд╕рд░реНрд╡рд╛рдВрдирд╛ рдирдорд╕реНрдХрд╛рд░! рд╣реЗ рдЖрд╣реЗ - рдХреНрд╡рд╛рд░реНрдХрд╕ рдорд╛рд▓рд┐рдХреЗрддреАрд▓ рдЖрдордЪреА рдЕрдВрддрд┐рдо рдкреЛрд╕реНрдЯ! (рддрд╕реЗ, рдЖрдордЪрд╛ рд╡реЗрдмрд┐рдирд╛рд░ рдкрд╣рд╛
╨Т
рдЖрд╡реГрддреНрддреА 0.17.0 рдкрд╛рд╕реВрди,
рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рд▓реЗ рдЬрд╛рддреЗ рдХреА рддреБрдореНрд╣реА рдЖрдзреАрдЪ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ AMQ рдСрдирд▓рд╛рдЗрди рддреИрдирд╛рдд рдХреЗрд▓реЗ рдЖрд╣реЗ (рдЬрд░ рдирд╕реЗрд▓, рддрд░ рдкрд╣рд╛
рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдПрдХ рдХреНрд╡рд╛рд░реНрдХрд╕ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░реВ рдЬреЛ рд░рд┐рдНрдХреНрдЯрд┐рд╡реНрд╣ рдореЗрд╕реЗрдЬрд┐рдВрдЧ рд╡рд╛рдкрд░реВрди рдПрдХ рд╕реЛрдкреА рдСрд░реНрдбрд░ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЕрд╕реЗрд▓. рдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдордзреНрдпреЗ рдСрд░реНрдбрд░ рдЬрдирд░реЗрдЯрд░рдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЕрд╕реЗрд▓ рдЬреЛ рдПрдХрд╛ рдард░рд╛рд╡рд┐рдХ рдЕрдВрддрд░рд╛рдиреЗ рд╕рдВрджреЗрд╢ рд░рд╛рдВрдЧреЗрдд рдСрд░реНрдбрд░ рдкрд╛рдард╡рддреЛ, рддрд╕реЗрдЪ рдСрд░реНрдбрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЬреЛ рд░рд╛рдВрдЧреЗрддреАрд▓ рд╕рдВрджреЗрд╢рд╛рдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрд▓ рдЖрдгрд┐ рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ рдкрд╛рд╣рдгреНрдпрд╛рдпреЛрдЧреНрдп рдкреБрд╖реНрдЯреАрдХрд░рдгреЗ рдЬрдирд░реЗрдЯ рдХрд░реЗрд▓.
рдПрдХрджрд╛ рдЖрдореНтАНрд╣реА рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХреЗрд▓реНтАНрдпрд╛рд╡рд░, рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдирдордзреНтАНрдпреЗ рдореЗрд╕реЗрдЬрд┐рдВрдЧ рд╕рд┐рд╕реНтАНрдЯрдо рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХрд╕реЗ рдПрдореНтАНрдмреЗрдб рдХрд░рд╛рдпрдЪреЗ рдЖрдгрд┐ рдЖрдореНтАНрд╣рд╛рд▓рд╛ рд╕рд┐рд╕реНтАНрдЯреАрдорд╡рд░ рдЖрд╡рд╢реНтАНрдпрдХ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреА рддрд░рддреВрдж рдХрд░рдгреНтАНрдпрд╛рд╕рд╛рдареА AMQ рдСрдирд▓рд╛рдЗрди рдХрд╕реЗ рд╡рд╛рдкрд░рд╛рдпрдЪреЗ рддреЗ рдЖрдореНтАНрд╣реА рджрд╛рдЦрд╡реВ.
рдХреНрд╡рд╛рд░реНрдХрд╕ рдЕреЕрдк
рдЖрдордЪрд╛ Quarkus рдНрдкреНрд▓рд┐рдХреЗрд╢рди OpenShift рд╡рд░ рдЪрд╛рд▓рддреЛ рдЖрдгрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдордЪреА рд╕реБрдзрд╛рд░рд┐рдд рдЖрд╡реГрддреНрддреА рдЖрд╣реЗ
рдСрд░реНрдбрд░ рдЬрдирд░реЗрдЯрд░
рдЬрдирд░реЗрдЯрд░ рджрд░ 5 рд╕реЗрдХрдВрджрд╛рдВрдиреА рд╡рд╛рдврддреНрдпрд╛ рдСрд░реНрдбрд░ рдЖрдпрдбреАрдВрдирд╛ "рдСрд░реНрдбрд░реНрд╕" рдкрддреНрддреНрдпрд╛рд╡рд░ рд╕рд╣рдЬрдкрдгреЗ рдкрд╛рдард╡рддреЛ.
@ApplicationScoped
public class OrderGenerator {
private int orderId = 1;
@Outgoing("orders")
public Flowable<Integer> generate() {
return Flowable.interval(5, TimeUnit.SECONDS)
.map(tick -> orderId++);
}
}
рдСрд░реНрдбрд░ рдкреНрд░реЛрд╕реЗрд╕рд░
рдСрд░реНрдбрд░ рд╣рдБрдбрд▓рд░ рдЖрдгрдЦреА рд╕реЛрдкрд╛ рдЖрд╣реЗ, рддреЛ рдлрдХреНрдд "рдкреБрд╖реНрдЯреАрдХрд░рдг" рдкрддреНрддреНрдпрд╛рд╡рд░ рдПрдХ рдкреБрд╖реНрдЯреАрдХрд░рдг рдЖрдпрдбреА рдкрд░рдд рдХрд░рддреЛ.
@ApplicationScoped
public class OrderProcessor {
@Incoming("orders")
@Outgoing("confirmations")
public Integer process(Integer order) {
// ╨Ш╨┤╨╡╨╜╤В╨╕╤Д╨╕╨║╨░╤В╨╛╤А ╨┐╨╛╨┤╤В╨▓╨╡╤А╨╢╨┤╨╡╨╜╨╕╤П ╤А╨░╨▓╨╡╨╜ ╤Г╨┤╨▓╨╛╨╡╨╜╨╜╨╛╨╝╤Г ╨╕╨┤╨╡╨╜╤В╨╕╤Д╨╕╨║╨░╤В╨╛╤А╤Г ╨╖╨░╨║╨░╨╖╨░ <img draggable="false" class="emoji" alt=":-)" src="https://s.w.org/images/core/emoji/11.2.0/svg/1f642.svg">
return order * 2;
}
}
рдкреБрд╖реНрдЯреАрдХрд░рдг рд╕рдВрд╕рд╛рдзрдиреЗ
рдкреБрд╖реНрдЯреАрдХрд░рдг рд╕рдВрд╕рд╛рдзрди рд╣рд╛ рдЖрдордЪреНрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рджреНрд╡рд╛рд░реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреБрд╖реНрдЯреАрдХрд░рдгрд╛рдВрдЪреА рд╕реВрдЪреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА HTTP рдПрдВрдбрдкреЙрдЗрдВрдЯ рдЖрд╣реЗ.
@Path("/confirmations")
public class ConfirmationResource {
@Inject
@Stream("confirmations") Publisher<Integer> orders;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
@GET
@Path("/stream")
@Produces(MediaType.SERVER_SENT_EVENTS)
public Publisher<Integer> stream() {
return orders;
}
}
рд╕рдорд╛рдпреЛрдЬрди
AMQ рдСрдирд▓рд╛рдЗрдирд╢реА рдХрдиреЗрдХреНрдЯ рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдордЪреНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд▓рд╛ рдХрд╛рд╣реА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдбреЗрдЯрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓, рдореНрд╣рдгрдЬреЗ: Quarkus рдХрдиреЗрдХреНрдЯрд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди, AMQP рдПрдВрдбрдкреЙрдЗрдВрдЯ рдорд╛рд╣рд┐рддреА рдЖрдгрд┐ рдХреНрд▓рд╛рдпрдВрдЯ рдХреНрд░реЗрдбреЗрдиреНрд╢рд┐рдпрд▓. рдЕрд░реНрдерд╛рддрдЪ, рд╕рд░реНрд╡ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдбреЗрдЯрд╛ рдПрдХрд╛рдЪ рдард┐рдХрд╛рдгреА рдареЗрд╡рдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдХреНрд╡рд╛рд░реНрдХрд╕ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрднрд╛рд╡реНрдп рдкрд░реНрдпрд╛рдп рджрд░реНрд╢рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рддреЗ рдореБрджреНрджрд╛рдо рд╡реЗрдЧрд│реЗ рдХрд░реВ.
рдХрдиреЗрдХреНрдЯрд░реНрд╕
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЧреБрдгрдзрд░реНрдо рдлрд╛рдЗрд▓ рд╡рд╛рдкрд░реВрди рд╕рдВрдХрд▓рд┐рдд рд╡реЗрд│реА рдХрдиреЗрдХреНрдЯрд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рди рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ:
mp.messaging.outgoing.orders.connector=smallrye-amqp
mp.messaging.incoming.orders.connector=smallrye-amqp
рдЧреЛрд╖реНрдЯреА рд╕реЛрдкреНрдпрд╛ рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдлрдХреНрдд "рдСрд░реНрдбрд░" рдкрддреНрддреНрдпрд╛рд╕рд╛рдареА рд╕рдВрджреЗрд╢ рд░рд╛рдВрдЧ рд╡рд╛рдкрд░реВ. рдЖрдгрд┐ рдЖрдордЪреНрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рддреАрд▓ "рдкреБрд╖реНрдЯреАрдХрд░рдг" рдкрддреНрддрд╛ рдореЗрдорд░реАрдордзреНрдпреЗ рд░рд╛рдВрдЧ рд╡рд╛рдкрд░реЗрд▓.
AMQP рдПрдВрдбрдкреЙрдЗрдВрдЯ
рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛рдирд╛, AMQP рдПрдВрдбрдкреЙрдЗрдВрдЯрд╕рд╛рдареА рд╣реЛрд╕реНрдЯрдирд╛рд╡ рдЖрдгрд┐ рдкреЛрд░реНрдЯ рдХреНрд░рдорд╛рдВрдХ рдЕрдЬреНрдЮрд╛рдд рдЖрд╣реЗ, рдореНрд╣рдгреВрди рддреЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХреЗрд▓реЗ рдЬрд╛рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. AMQ рдСрдирд▓рд╛рдЗрди рджреНрд╡рд╛рд░реЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрдореЕрдкрдордзреНрдпреЗ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рддреНрдпрд╛рдВрдирд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдореЕрдирд┐рдлреЗрд╕реНрдЯрдордзреАрд▓ рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рдЪрд▓рд╛рдВрджреНрд╡рд╛рд░реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВ:
spec:
template:
spec:
containers:
- env:
- name: AMQP_HOST
valueFrom:
configMapKeyRef:
name: quarkus-config
key: service.host
- name: AMQP_PORT
valueFrom:
configMapKeyRef:
name: quarkus-config
key: service.port.amqp
рд╢реНрд░реЗрдп
рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдЯреЛрдХрдирдЪрд╛ рдЙрдкрдпреЛрдЧ OpenShift рд╡рд░ рдЖрдордЪрд╛ рдЕрд░реНрдЬ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рдкреНрд░рдердо рдПрдХ рд╕рд╛рдиреБрдХреВрд▓ рдХреЙрдиреНрдлрд┐рдЧрд╕реЛрд░реНрд╕ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреЗ рдкреЙрдбрдЪреНрдпрд╛ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдордордзреВрди рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЯреЛрдХрди рд╡рд╛рдЪреЗрд▓:
public class MessagingCredentialsConfigSource implements ConfigSource {
private static final Set<String> propertyNames;
static {
propertyNames = new HashSet<>();
propertyNames.add("amqp-username");
propertyNames.add("amqp-password");
}
@Override
public Set<String> getPropertyNames() {
return propertyNames;
}
@Override
public Map<String, String> getProperties() {
try {
Map<String, String> properties = new HashMap<>();
properties.put("amqp-username", "@@serviceaccount@@");
properties.put("amqp-password", readTokenFromFile());
return properties;
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
@Override
public String getValue(String key) {
if ("amqp-username".equals(key)) {
return "@@serviceaccount@@";
}
if ("amqp-password".equals(key)) {
try {
return readTokenFromFile();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
return null;
}
@Override
public String getName() {
return "messaging-credentials-config";
}
private static String readTokenFromFile() throws IOException {
return new String(Files.readAllBytes(Paths.get("/var/run/secrets/kubernetes.io/serviceaccount/token")), StandardCharsets.UTF_8);
}
}
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрдпрд╛рд░ рдХрд░рд╛ рдЖрдгрд┐ рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рд╛
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓ рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, GraalVM рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдпрд╛рд╕рд╛рдареА рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╕реЗ рд╕реЗрдЯ рдХрд░рд╛рдпрдЪреЗ рдпрд╛рдЪреНрдпрд╛ рддрдкрд╢реАрд▓рд╛рдВрд╕рд╛рдареА, рдордзреАрд▓ рд╕рдВрдмрдВрдзрд┐рдд рд╕реВрдЪрдирд╛ рдкрд╣рд╛
рддреНрдпрд╛рдирдВрддрд░, рддреЗрдереЗ рджрд┐рд▓реЗрд▓реНрдпрд╛ рд╕реВрдЪрдирд╛рдВрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░реВрди, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕реНрддреНрд░реЛрдд рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ, рдЖрдордЪрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрдгрд┐ рддреИрдирд╛рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:
git clone https://github.com/EnMasseProject/enmasse-example-clients
cd enmasse-example-clients/quarkus-example-client
oc new-project myapp
mvn -Pnative -Dfabric8.mode=openshift -Dfabric8.build.strategy=docker package fabric8:build fabric8:resource fabric8:apply
рдпрд╛ рдЖрджреЗрд╢рд╛рдВрдирдВрддрд░, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЙрдкрдпреЛрдЬрд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓, рдкрд░рдВрддреБ рдЬреЛрдкрд░реНрдпрдВрдд рдЖрдореНрд╣реА AMQ рдСрдирд▓рд╛рдЗрди рдордзреНрдпреЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрджреЗрд╢ рд╕рдВрд╕рд╛рдзрдиреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдд рдирд╛рд╣реА рддреЛрдкрд░реНрдпрдВрдд рддреЗ рд╕реБрд░реВ рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА.
рдореЗрд╕реЗрдЬрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯ рдХрд░рдд рдЖрд╣реЗ
рдЖрддрд╛ рдлрдХреНрдд рдЖрдордЪреНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд▓рд╛ рдореЗрд╕реЗрдЬрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдордордзреНрдпреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реА рд╕рдВрд╕рд╛рдзрдиреЗ рд╕реЗрдЯ рдХрд░рдгреЗ рдмрд╛рдХреА рдЖрд╣реЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ: 1) рдореЗрд╕реЗрдЬрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕреЕрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕; 2) рдЖрдореНрд╣реА рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдордзреНрдпреЗ рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реЗ рдкрддреНрддреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкрддреНрддрд╛; 3) рдореЗрд╕реЗрдЬрд┐рдВрдЧ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдХреНрд▓рд╛рдпрдВрдЯ рдХреНрд░реЗрдбреЗрдиреНрд╢рд┐рдпрд▓ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА.
рдкрддреНрддреНрдпрд╛рдЪреА рдЬрд╛рдЧрд╛
AMQ рдСрдирд▓рд╛рдЗрди рдордзреАрд▓ AddressSpace рдСрдмреНрдЬреЗрдХреНрдЯ рд╣рд╛ рдкрддреНрддреНрдпрд╛рдВрдЪрд╛ рдПрдХ рд╕рдореВрд╣ рдЖрд╣реЗ рдЬреЛ рдХрдиреЗрдХреНрд╢рди рдПрдВрдбрдкреЙрдЗрдВрдЯ рдЖрдгрд┐ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЖрдгрд┐ рдЕрдзрд┐рдХреГрддрддрд╛ рдзреЛрд░рдгреЗ рд╕рд╛рдорд╛рдпрд┐рдХ рдХрд░рддреЛ. рддреБрдореНрд╣реА рдЕреЕрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рддрдпрд╛рд░ рдХрд░рддрд╛ рддреЗрд╡реНрд╣рд╛, рдореЗрд╕реЗрдЬрд┐рдВрдЧ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХрд╕реЗ рдЙрдШрдб рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓ рддреЗ рддреБрдореНрд╣реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддрд╛:
apiVersion: enmasse.io/v1beta1
kind: AddressSpace
metadata:
name: quarkus-example
spec:
type: brokered
plan: brokered-single-broker
endpoints:
- name: messaging
service: messaging
exports:
- name: quarkus-config
kind: configmap
рдкрддреНрддреЗ
рдкрддреНрддреЗ рд╕рдВрджреЗрд╢ рдкрд╛рдард╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд. рдкреНрд░рддреНрдпреЗрдХ рдкрддреНрддреНрдпрд╛рдЪрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдЕрд╕рддреЛ, рдЬреЛ рддреНрдпрд╛рдЪреЗ рд╢рдмреНрджрд╛рд░реНрде, рддрд╕реЗрдЪ рдПрдХ рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЛ, рдЬреЛ рдЖрд░рдХреНрд╖рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЛ. рдкрддреНрддрд╛ рдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдпрд╛рдкреНрд░рдорд╛рдгреЗ:
apiVersion: enmasse.io/v1beta1
kind: Address
metadata:
name: quarkus-example.orders
spec:
address: orders
type: queue
plan: brokered-queue
рдореЗрд╕реЗрдЬрд┐рдВрдЧ рд╡рд╛рдкрд░рдХрд░реНрддрд╛
рдХреЗрд╡рд│ рд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рд░реНрд╣ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдЪ рддреБрдордЪреНрдпрд╛ рдкрддреНрддреНрдпрд╛рдВрд╡рд░ рд╕рдВрджреЗрд╢ рдкрд╛рдард╡реВ рдЖрдгрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реВ рд╢рдХрддрд╛рдд рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рдореЗрд╕реЗрдЬрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдордордзреНрдпреЗ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдХреНрд▓рд╕реНрдЯрд░рд╡рд░ рдЪрд╛рд▓рдгрд╛рд░реНтАНрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрд╕рд╛рдареА, рдХреНрд▓рд╛рдпрдВрдЯрд▓рд╛ OpenShift рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рд╡рд╛рдкрд░реВрди рдкреНрд░рдорд╛рдгреАрдХреГрдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рд╡рд╛рдкрд░рдХрд░реНрддрд╛ "рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ" рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдпрд╛рдкреНрд░рдорд╛рдгреЗ:
apiVersion: user.enmasse.io/v1beta1
kind: MessagingUser
metadata:
name: quarkus-example.app
spec:
username: system:serviceaccount:myapp:default
authentication:
type: serviceaccount
authorization:
- operations: ["send", "recv"]
addresses: ["orders"]
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкрд░рд╡рд╛рдирдЧреНрдпрд╛
AMQ Online рд╕рд╛рдареА рдЖрдореНрд╣реА AMQP рдПрдВрдбрдкреЙрдЗрдВрдЯ рдорд╛рд╣рд┐рддреА рдПрдореНрдмреЗрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗрд▓рд╛ рдХреЙрдиреНрдлрд┐рдЧрдореЕрдк рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд░реЛрд▓ рдЖрдгрд┐ рд░реЛрд▓рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реЗрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: quarkus-config
spec:
rules:
- apiGroups: [ "" ]
resources: [ "configmaps" ]
verbs: [ "create" ]
- apiGroups: [ "" ]
resources: [ "configmaps" ]
resourceNames: [ "quarkus-config" ]
verbs: [ "get", "update", "patch" ]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: quarkus-config
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: quarkus-config
subjects:
- kind: ServiceAccount
name: address-space-controller
namespace: amq-online-infra
рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рд╛рд╡реЗ
рддреБрдореНрд╣реА рдореЗрд╕реЗрдЬрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдпрд╛рдкреНрд░рдорд╛рдгреЗ рд▓рд╛рдЧреВ рдХрд░реВ рд╢рдХрддрд╛:
cd enmasse-example-clients/quarkus-example-client
oc project myapp
oc apply -f src/main/resources/k8s/addressspace
oc apply -f src/main/resources/k8s/address
рдЕрд░реНрдЬ рдкрдбрддрд╛рд│рдгреА
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реБрд░реВ рдЭрд╛рд▓рд╛ рдЖрд╣реЗ рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╕рд░реНрд╡рдкреНрд░рдердо, рд╕рдВрдмрдВрдзрд┐рдд рдкрддреНрддреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд рдЖрдгрд┐ рддреЗ рд╕рдХреНрд░рд┐рдп рдЖрд╣реЗрдд рдХрд╛ рддреЗ рддрдкрд╛рд╕реВрдпрд╛:
until [[ `oc get address quarkus-example.prices -o jsonpath='{.status.phase}'` == "Active" ]]; do echo "Not yet ready"; sleep 5; done
рдЪрд▓рд╛ рдордЧ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд░реВрдЯ URL рддрдкрд╛рд╕реВ (рдлрдХреНрдд рд╣рд╛ рдкрддреНрддрд╛ рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ рдЙрдШрдбрд╛):
echo "http://$(oc get route quarkus-example-client -o jsonpath='{.spec.host}')/prices.html"
рдмреНрд░рд╛рдЙрдЭрд░рдиреЗ рджрд░реНрд╢рд╡рд┐рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ рдХреА AMQ рдСрдирд▓рд╛рдЗрдирджреНрд╡рд╛рд░реЗ рд╕рдВрджреЗрд╢ рдкрд╛рдард╡рд▓реЗ рдЖрдгрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдд рдЕрд╕рд▓реНрдпрд╛рдиреЗ рддрд┐рдХрд┐рдЯреЗ рд╡реЗрд│реЛрд╡реЗрд│реА рдЕрдкрдбреЗрдЯ рдХреЗрд▓реА рдЬрд╛рддрд╛рдд.
рдЧреЛрд│рд╛ рдХрд░реАрдд рдЖрд╣реЗ
рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдореЗрд╕реЗрдЬрд┐рдВрдЧрд╕рд╛рдареА AMQP рд╡рд╛рдкрд░рдгрд╛рд░рд╛ рдХреНрд╡рд╛рд░реНрдХрд╕ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рд╣рд┐рд▓реЗ, рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд▓рд╛ Red Hat OpenShift рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЖрдгрд┐ AMQ рдСрдирд▓рд╛рдЗрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╡рд░ рдЖрдзрд╛рд░рд┐рдд рддреНрдпрд╛рдЪреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХреЗрд▓реЗ. рддреНрдпрд╛рдирдВрддрд░ рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд╕рд╛рдареА рдореЗрд╕реЗрдЬрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдореЕрдирд┐рдлреЗрд╕реНрдЯ рддрдпрд╛рд░ рдХреЗрд▓реЗ.
рдпрд╛рдореБрд│реЗ рдХреНрд╡рд╛рд░реНрдХрд╕ рдмрджреНрджрд▓рдЪреА рдорд╛рд▓рд┐рдХрд╛ рд╕рдВрдкрддреЗ, рдкрдг рдкреБрдвреЗ рдЦреВрдк рдирд╡реАрди рдЖрдгрд┐ рдордиреЛрд░рдВрдЬрдХ рдЧреЛрд╖реНрдЯреА рдЖрд╣реЗрдд, рдЯреНрдпреВрди рд░рд╛рд╣рд╛!
рд╕реНрддреНрд░реЛрдд: www.habr.com