{"id":46828,"date":"2023-09-21T06:11:31","date_gmt":"2022-12-17T13:09:36","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8open-liberty%e5%92%8cmicroprofile-reactive-messaging%e8%af%bb%e5%8f%96kafka%e4%ba%8b%e4%bb%b6%e3%80%82\/"},"modified":"2024-05-04T00:49:55","modified_gmt":"2024-05-03T16:49:55","slug":"%e4%bd%bf%e7%94%a8open-liberty%e5%92%8cmicroprofile-reactive-messaging%e8%af%bb%e5%8f%96kafka%e4%ba%8b%e4%bb%b6%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8open-liberty%e5%92%8cmicroprofile-reactive-messaging%e8%af%bb%e5%8f%96kafka%e4%ba%8b%e4%bb%b6%e3%80%82\/","title":{"rendered":"\u4f7f\u7528Open Liberty\u548cMicroProfile Reactive Messaging\u8bfb\u53d6Kafka\u4e8b\u4ef6"},"content":{"rendered":"<p>\u5728Java\u5e94\u7528\u670d\u52a1\u5668Open Liberty\u4e2d\uff0c\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u79f0\u4e3aMicroProfile Reactive Messaging\u7684API\u89c4\u8303\u6765\u8fdb\u884c\u4e8b\u4ef6\u5904\u7406\u3002<\/p>\n<p>\u5728\u8fd9\u7bc7\u6587\u7ae0\u4e2d\uff0c\u6211\u4eec\u5c06\u5c1d\u8bd5\u4f7f\u7528MicroProfile Reactive Messaging\u5728Apache Kafka\u4e2d\u5b9e\u73b0\u8bfb\u53d6\u548c\u5904\u7406\u4e8b\u4ef6\u7684\u6d88\u8d39\u8005\u3002\u5173\u4e8e\u4e8b\u4ef6\u53d1\u9001\u7684\u5185\u5bb9\u5c06\u5728\u53e6\u4e00\u7bc7\u6587\u7ae0\u4e2d\u4ecb\u7ecd\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d7aa3913a08637a696db0\/2-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2022-11-06 21.54.44.png\" \/><\/div>\n<h2>\u5728\u672c\u6587\u4e2d\u4f7f\u7528\u7684\u7ec4\u4ef6- natively \u8fd9\u672c\u62a5\u544a\u4f7f\u7528\u7684\u7ec4\u4ef6<\/h2>\n<p>\u672c\u6587\u4e2d\u5c06\u4f7f\u7528\u4ee5\u4e0b\u7ec4\u4ef6\u7248\u672c\u3002<br \/>\n\u7531\u4e8e\u5c06\u6765\u53ef\u80fd\u65e0\u6cd5\u4e0e\u5347\u7ea7\u7248\u672c\u517c\u5bb9\uff0c\u5efa\u8bae\u5728\u6295\u5165\u751f\u4ea7\u4e4b\u524d\u5728\u672c\u5730\u8fdb\u884c\u9a8c\u8bc1\u3002<\/p>\n<div>\n<div class=\"post-table\">\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u540d\u30d0\u30fc\u30b8\u30e7\u30f3JDKOpenJDK 17.0.4.1 (IBM Semeru Runtime Open Edition)Open Liberty22.0.0.11<\/div>\n<\/div>\n<h2>\u751f\u6210Open Liberty Java\u5e94\u7528\u7a0b\u5e8f\u7684\u6a21\u677f<\/h2>\n<p>\u9996\u5148\u521b\u5efa\u4e00\u4e2a\u5b9e\u73b0Consumer\u7684Open Liberty\u5e94\u7528\u7a0b\u5e8f\u3002<br \/>\n\u4f7f\u7528Open Liberty\u7f51\u7ad9\u4e0a\u7684\u96db\u5f62\u751f\u6210\u529f\u80fd\u53ef\u4ee5\u8f7b\u677e\u521b\u5efa\u5e94\u7528\u7a0b\u5e8f\u7684\u6846\u67b6\u3002<\/p>\n<p>\u60a8\u53ef\u4ee5\u4eceStarter\u5e94\u7528\u7a0b\u5e8f\u7684\u6a21\u677f\u751f\u6210\u9875\u9762\u5f00\u59cb\uff0c\u6309\u7167\u4e0b\u56fe\u7684\u65b9\u5f0f\u8f93\u5165\u503c\uff0c\u7136\u540e\u70b9\u51fb&#8221;\u751f\u6210\u9879\u76ee&#8221;\u6309\u94ae\u3002&#8221;Group&#8221;\u548c&#8221;Artifact&#8221;\u53ef\u4ee5\u586b\u5199\u4efb\u610f\u503c\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d7aa3913a08637a696db0\/9-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2022-11-06 21.56.54.png\" \/><\/div>\n<div>\u8bf7\u6ce8\u610f\uff0c\u5728\u64b0\u5199\u672c\u6587\u65f6\uff0c\u5982\u679c\u5c06Java EE \/ Jakarta EE\u7248\u672c\u6307\u5b9a\u4e3a\u201c9.1\u201d\uff0c\u5b83\u5c06\u65e0\u6cd5\u4f5c\u4e3a\u6d88\u8d39\u8005\u6b63\u5e38\u8fd0\u884c\u3002<\/div>\n<h2>\u5b89\u88c5\u4f9d\u5b58\u5e93<\/h2>\n<p>\u4e3a\u4e86\u5904\u7406\u6765\u81eaMicroProfile Reactive Messaging API\u7684Kafka\u4e8b\u4ef6\uff0c\u8bf7\u5b89\u88c5\u76f8\u5e94\u7684\u4f9d\u8d56\u5e93\u3002<br \/>\n\u5728\u751f\u6210\u7684\u57fa\u7840\u9879\u76ee\u4e2d\uff0c\u6211\u4eec\u5df2\u7ecf\u9009\u62e9\u4e86Maven\u4f5c\u4e3a\u4f9d\u8d56\u5e93\u7684\u7ba1\u7406\u65b9\u6cd5\u3002\u5728Maven\u7684\u914d\u7f6e\u6587\u4ef6pom.xml\u7684dependencies\u5143\u7d20\u4e2d\uff0c\u6307\u5b9a\u4ee5\u4e0b\u4f9d\u8d56\u5e93\u3002\u5b89\u88c5\u5c06\u81ea\u52a8\u5728Eclipse\u6216IntelliJ\u7b49IDE\u4e0a\u6267\u884c\u3002<\/p>\n<pre class=\"post-pre\"><code>    <span class=\"c\">&lt;!-- \u5fc5\u8981\u306a\u3082\u306e\u3060\u3051\u8a18\u8f09 --&gt;<\/span>\r\n    <span class=\"nt\">&lt;dependencies&gt;<\/span>\r\n        <span class=\"nt\">&lt;dependency&gt;<\/span>\r\n            <span class=\"nt\">&lt;groupId&gt;<\/span>org.eclipse.microprofile.reactive.messaging<span class=\"nt\">&lt;\/groupId&gt;<\/span>\r\n            <span class=\"nt\">&lt;artifactId&gt;<\/span>microprofile-reactive-messaging-api<span class=\"nt\">&lt;\/artifactId&gt;<\/span>\r\n            <span class=\"nt\">&lt;version&gt;<\/span>2.0.1<span class=\"nt\">&lt;\/version&gt;<\/span>\r\n            <span class=\"nt\">&lt;scope&gt;<\/span>provided<span class=\"nt\">&lt;\/scope&gt;<\/span>\r\n        <span class=\"nt\">&lt;\/dependency&gt;<\/span>\r\n        <span class=\"nt\">&lt;dependency&gt;<\/span>\r\n            <span class=\"nt\">&lt;groupId&gt;<\/span>org.apache.kafka<span class=\"nt\">&lt;\/groupId&gt;<\/span>\r\n            <span class=\"nt\">&lt;artifactId&gt;<\/span>kafka-clients<span class=\"nt\">&lt;\/artifactId&gt;<\/span>\r\n            <span class=\"nt\">&lt;version&gt;<\/span>3.3.1<span class=\"nt\">&lt;\/version&gt;<\/span>\r\n        <span class=\"nt\">&lt;\/dependency&gt;<\/span>\r\n        <span class=\"nt\">&lt;dependency&gt;<\/span>\r\n            <span class=\"nt\">&lt;groupId&gt;<\/span>org.slf4j<span class=\"nt\">&lt;\/groupId&gt;<\/span>\r\n            <span class=\"nt\">&lt;artifactId&gt;<\/span>slf4j-jdk14<span class=\"nt\">&lt;\/artifactId&gt;<\/span>\r\n            <span class=\"nt\">&lt;version&gt;<\/span>1.7.36<span class=\"nt\">&lt;\/version&gt;<\/span> <span class=\"c\">&lt;!-- 2.x.y \u306fNG --&gt;<\/span>\r\n        <span class=\"nt\">&lt;\/dependency&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/dependencies&gt;<\/span>\r\n<\/code><\/pre>\n<p>\u5728Open Liberty\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528slf4j-jdk14\u6765\u8f93\u51faMicroProfile Reactive Messaging\u548cKafka\u5ba2\u6237\u7aef\u5e93\u7684\u65e5\u5fd7\u3002<\/p>\n<div>\u57282022\u5e7411\u6708\u7684\u672c\u6587\u64b0\u5199\u65f6\uff0cslf4j-jdk14\u6709\u4e00\u4e2a\u66f4\u9ad8\u76842.x.y\u7248\u672c\u53ef\u4f9b\u4f7f\u7528\u3002\u4f46\u662f\uff0c\u5982\u679c\u6307\u5b9a\u4e862.x\u7248\u672c\uff0c\u5e94\u7528\u7a0b\u5e8f\u53ef\u80fd\u65e0\u6cd5\u6b63\u5e38\u542f\u52a8\uff0c\u56e0\u6b64\u5efa\u8bae\u6307\u5b9a\u4e0a\u8ff0\u7248\u672c\u4ee5\u786e\u4fdd\u5b89\u5168\u3002<\/div>\n<h2>\u7279\u5f81\u7684\u6307\u5b9a<\/h2>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u6307\u5b9a\u529f\u80fd\u5e76\u52a0\u8f7dOpen Liberty\u4ee5\u4f7f\u7528MicroProfile Reactive Messaging\u3002<\/p>\n<p>\u5728Open Liberty\u4e2d\u4f7f\u7528\u7684\u6a21\u5757\u88ab\u7ec6\u5206\u4e3a&#8221;Feature&#8221;\u7684\u5f62\u5f0f\u3002\u901a\u8fc7\u4ec5\u4f7f\u7528\u6240\u9700\u7684Feature\uff0c\u53ef\u4ee5\u4fdd\u6301\u5e94\u7528\u7a0b\u5e8f\u7684\u5927\u5c0f\u8f83\u5c0f\u3002<\/p>\n<p>\u672c\u6b21\u4f7f\u7528\u7684MicroProfile Reactive Messaging\u8fd8\u51c6\u5907\u4e86\u4e13\u7528\u7684\u529f\u80fd\u3002<br \/>\n\u5728Open Liberty\u7684\u914d\u7f6e\u6587\u4ef6 server.xml \u4e2d\u6307\u5b9a mpReactiveMessaging-1.0 Feature\u3002<\/p>\n<p>\u6211\u5011\u9806\u4fbf\u5728 \u5143\u7d20\u4e2d\u555f\u7528\u65e5\u8a8c\u8f38\u51fa\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\">&lt;!-- src\/main\/liberty\/config\/server.xml --&gt;<\/span>\r\n<span class=\"cp\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;<\/span>\r\n<span class=\"nt\">&lt;server<\/span> <span class=\"na\">description=<\/span><span class=\"s\">\"My Liberty Server\"<\/span><span class=\"nt\">&gt;<\/span>\r\n\r\n    <span class=\"c\">&lt;!-- Enable features --&gt;<\/span>\r\n    <span class=\"nt\">&lt;featureManager&gt;<\/span>\r\n        <span class=\"nt\">&lt;feature&gt;<\/span>mpReactiveMessaging-1.0<span class=\"nt\">&lt;\/feature&gt;<\/span>\r\n    <span class=\"nt\">&lt;\/featureManager&gt;<\/span>\r\n\r\n    <span class=\"c\">&lt;!-- ...\u4e2d\u7565... --&gt;<\/span>\r\n\r\n    <span class=\"c\">&lt;!-- Logging --&gt;<\/span>\r\n    <span class=\"nt\">&lt;logging<\/span> <span class=\"na\">traceSpecification=<\/span><span class=\"s\">\"REACTIVEMESSAGE=all:org.apache.kafka.*=all\"<\/span><span class=\"nt\">\/&gt;<\/span>\r\n\r\n<span class=\"nt\">&lt;\/server&gt;<\/span>\r\n\r\n<\/code><\/pre>\n<h2>\u5b9a\u4e49Kafka\u7684\u8fde\u63a5\u4fe1\u606f<\/h2>\n<p>\u5b89\u88c5\u4e86\u5e93\u548c\u7279\u6027\u4e4b\u540e\uff0c\u63a5\u4e0b\u6765\u9700\u8981\u5b9a\u4e49\u4e0eApache Kafka\u7684\u8fde\u63a5\u4fe1\u606f\u3002\u8fde\u63a5\u4fe1\u606f\u5e94\u5728MicroProfile Config\u7684\u914d\u7f6e\u6587\u4ef6microprofile-config.properties\u4e2d\u5b9a\u4e49\u3002<\/p>\n<p>\u8bf7\u5728&lt;\u9879\u76ee\u6839\u76ee\u5f55&gt;\/src\/main\/resources\/META-INF\/microprofile-config.properties\u4e2d\u5b9a\u4e49\u4ee5\u4e0b\u8bbe\u7f6e\u503c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"py\">mp.messaging.incoming.purchases.connector<\/span><span class=\"p\">=<\/span><span class=\"s\">liberty-kafka<\/span>\r\n<span class=\"py\">mp.messaging.incoming.purchases.bootstrap.servers<\/span><span class=\"p\">=<\/span><span class=\"s\">localhost:9092<\/span>\r\n<span class=\"py\">mp.messaging.incoming.purchases.group.id<\/span><span class=\"p\">=<\/span><span class=\"s\">liberty-sample-consumer<\/span>\r\n<span class=\"py\">mp.messaging.incoming.purchases.key.deserializer<\/span><span class=\"p\">=<\/span><span class=\"s\">org.apache.kafka.common.serialization.StringDeserializer<\/span>\r\n<span class=\"py\">mp.messaging.incoming.purchases.value.deserializer<\/span><span class=\"p\">=<\/span><span class=\"s\">org.apache.kafka.common.serialization.StringDeserializer<\/span>\r\n<span class=\"py\">mp.messaging.incoming.purchases.auto.offset.reset<\/span><span class=\"p\">=<\/span><span class=\"s\">earliest<\/span>\r\n<\/code><\/pre>\n<p>\u5728\u4e2d\u6587\u4e2d\uff0c\u53ef\u4ee5\u5982\u4e0b\u65b9\u5f0f\u8fdb\u884c\u8f6c\u8ff0\uff1a<\/p>\n<p>\u8bbe\u5b9a\u503c\u9700\u8981\u6309\u7167\u4ee5\u4e0b\u683c\u5f0f\u8fdb\u884c\u5b9a\u4e49\uff1amp.messaging.&lt;incoming|outgoing&gt;.&lt;\u9891\u9053\u540d\u79f0&gt;.&lt;\u5c5e\u6027\u540d\u79f0&gt;=&lt;\u8bbe\u5b9a\u503c&gt;\u3002<\/p>\n<p>\u5982\u679c\u60a8\u60f3\u8981\u8bfb\u53d6\u4e8b\u4ef6\uff0c\u8bf7\u5c06\u7b2c\u4e09\u4e2a\u7531\u70b9\u5206\u9694\u7684\u5143\u7d20\u6307\u5b9a\u4e3a&#8221;incoming&#8221;\u3002\u76f8\u53cd\uff0c\u5982\u679c\u8981\u53d1\u9001\u4e8b\u4ef6\uff0c\u5219\u5c06\u5176\u6307\u5b9a\u4e3a&#8221;outgoing&#8221;\u3002<br \/>\n&lt;\u5c5e\u6027\u540d\u79f0&gt;\u9075\u5faaApache Kafka\u7684\u914d\u7f6e\u503c\u547d\u540d\u89c4\u5219\uff0c\u5982\u679c\u60a8\u5e0c\u671b\u8fdb\u4e00\u6b65\u8be6\u7ec6\u914d\u7f6e\uff0c\u8bf7\u53c2\u8003Apache Kafka\u6587\u6863\u3002<\/p>\n<p>\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u8fde\u63a5\u5230 Kafka Broker localhost:9092\uff0c\u5e76\u5b9a\u4e49\u4e8b\u4ef6\u7684\u952e\u548c\u503c\u5206\u522b\u4e3a String \u7c7b\u578b\u3002connector \u5c5e\u6027\u662f\u552f\u4e00\u7684\u7279\u6b8a\u5c5e\u6027\uff0c\u8fde\u63a5\u5230 Kafka \u65f6\u9700\u8981\u6307\u5b9a\u56fa\u5b9a\u503c liberty-kafka\u3002<\/p>\n<p>\u53c2\u8003\uff1aApache Kafka \u6d88\u8d39\u8005\u914d\u7f6e<\/p>\n<h2>\u4e8b\u4ef6\u64cd\u4f5c\u5e94\u7528\u7a0b\u5e8f\u7684\u5b9e\u65bd<\/h2>\n<p>\u6211\u5011\u6703\u5be6\u73fe\u4e00\u500b\u5f9eKafka\u8b80\u53d6\u4e8b\u4ef6\u7684\u61c9\u7528\u7a0b\u5e8f\u3002\u6211\u5011\u5c07\u4ee5\u65e5\u8a8c\u8f38\u51fa\u6307\u5b9a\u7232\u8cfc\u8cb7\u5546\u54c1\u540d\u7684\u4e8b\u4ef6\u503c\u4f86\u9032\u884c\u5be6\u73fe\u3002<\/p>\n<p>\u4ee5\u4e0b\u662f\u5b9e\u65bd\u793a\u4f8b\uff1a<br \/>\n\u867d\u7136\u53ea\u6709\u5927\u7ea620\u884c\u7684\u7b80\u5355\u793a\u4f8b\uff0c\u4f46\u4ec5\u51ed\u8fd9\u4e2a\u5c31\u53ef\u4ee5\u5904\u7406\u4e8b\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">\/\/ PurchaseResource.java<\/span>\r\n<span class=\"kn\">package<\/span> <span class=\"nn\">com.example.resource<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.eclipse.microprofile.reactive.messaging.Incoming<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">javax.enterprise.context.ApplicationScoped<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.logging.Logger<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"nd\">@ApplicationScoped<\/span>\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">PurchaseResource<\/span> <span class=\"o\">{<\/span>\r\n    <span class=\"kd\">private<\/span> <span class=\"kd\">static<\/span> <span class=\"kd\">final<\/span> <span class=\"nc\">Logger<\/span> <span class=\"n\">logger<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">Logger<\/span><span class=\"o\">.<\/span><span class=\"na\">getLogger<\/span><span class=\"o\">(<\/span><span class=\"nc\">PurchaseResource<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">.<\/span><span class=\"na\">getName<\/span><span class=\"o\">());<\/span>\r\n\r\n    <span class=\"nd\">@Incoming<\/span><span class=\"o\">(<\/span><span class=\"s\">\"purchases\"<\/span><span class=\"o\">)<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">consumePurchases<\/span><span class=\"o\">(<\/span><span class=\"nc\">String<\/span> <span class=\"n\">item<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"kd\">final<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">itemMessage<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">String<\/span><span class=\"o\">.<\/span><span class=\"na\">format<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Consumed item purchase: item name = %s\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">item<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">logger<\/span><span class=\"o\">.<\/span><span class=\"na\">info<\/span><span class=\"o\">(<\/span><span class=\"n\">itemMessage<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/code><\/pre>\n<p>\u6700\u91cd\u8981\u7684\u90e8\u5206\u662f @Incoming(&#8220;&lt;\u9891\u9053\u540d\u79f0&gt;&#8221;)\u3002<br \/>\n@Incoming \u662f\u7531MicroProfile Reactive Messaging\u63d0\u4f9b\u7684\u7528\u4e8e\u8bfb\u53d6\u4e8b\u4ef6\u7684\u6ce8\u89e3\u3002\u6307\u5b9a\u7684\u9891\u9053\u540d\u79f0\u4e0e\u5728 microprofile-config.properties \u4e2d\u5b9a\u4e49\u7684\u9891\u9053\u540d\u79f0\u76f8\u5173\u8054\u3002<\/p>\n<div>\u5728\u6b64\u793a\u4f8b\u4ee3\u7801\u4e2d\uff0c\u6211\u4eec\u53ea\u6307\u5b9a\u4e86\u6dfb\u52a0\u4e86 @Incoming \u6ce8\u89e3\u7684\u65b9\u6cd5\u7684\u4e8b\u4ef6\u503c\u53c2\u6570\u3002\u5982\u679c\u60f3\u83b7\u53d6\u4e8b\u4ef6\u7684\u952e\u6216\u4e3b\u9898\u540d\u79f0\uff0c\u53ef\u4ee5\u6dfb\u52a0\u4ee5\u4e0b\u4e09\u4e2a\u5b9e\u73b0\u3002<br \/>\n\uff081\uff09\u6307\u5b9a\u53c2\u6570\u4e3a Message \u7c7b\u578b<br \/>\n\uff082\uff09\u5c06\u53c2\u6570\u7684\u503c\u5f3a\u5236\u8f6c\u6362\u4e3a ConsumerRecord \u7c7b\u578b<br \/>\n\uff083\uff09\u6307\u5b9a\u65b9\u6cd5\u8fd4\u56de\u4e00\u4e2a CompletionStage \u7c7b\u578b<br \/>\n\u6709\u5173\u8be6\u7ec6\u793a\u4f8b\uff0c\u8bf7\u53c2\u9605\u4e0b\u9762\u7684\u535a\u5ba2\u6587\u7ae0\u3002<br \/>\n\u535a\u5ba2-\u8bbf\u95eeKafka\u6d88\u606f\u4e2d\u7684\u7279\u5b9a\u5c5e\u6027\uff0c\u5e76\u5728Open Liberty 20.0.0.3\u4e2d\u4e3aCookie\u8bbe\u7f6eSameSite\u5c5e\u6027\u3002<\/div>\n<h2>\u5e94\u7528\u7a0b\u5e8f\u7684\u8fd0\u884c\u786e\u8ba4<\/h2>\n<p>\u7531\u65bc\u61c9\u7528\u7a0b\u5f0f\u6e96\u5099\u5c31\u7dd2\uff0c\u6240\u4ee5\u73fe\u5728\u53ef\u4ee5\u9023\u63a5\u5230Kafka\uff0c\u4e26\u8b80\u53d6\u4e8b\u4ef6\u3002<br \/>\n\u5728\u61c9\u7528\u7a0b\u5f0f\u904b\u884c\u4e4b\u524d\uff0c\u8acb\u555f\u52d5Kafka Broker\u4e26\u5275\u5efa\u540d\u70ba&#8221;purchases&#8221;\u7684\u4e3b\u984c\u3002<\/p>\n<p>\u6b64\u5916\uff0cStarter\u5e94\u7528\u7a0b\u5e8f\u5df2\u7ecf\u96c6\u6210\u4e86\u542f\u52a8Open Liberty\u7684Maven\u63d2\u4ef6\u3002\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u542f\u52a8Open Liberty\u3002\u7f16\u8bd1\u540e\u7684WAR\u6587\u4ef6\u5c06\u81ea\u52a8\u90e8\u7f72\u5230Open Liberty\u670d\u52a1\u5668\u4e0a\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>mvn liberty:dev\r\n<\/code><\/pre>\n<p>\u5982\u679c\u6210\u529f\u52a0\u5165\u5177\u6709\u201cGeneration\u201d\u7684\u7ec4\uff0c\u5219\u5c06\u8f93\u51fa\u5927\u91cf\u65e5\u5fd7\uff0c\u5e76\u4e14\u5982\u679c\u8f93\u51fa\u4e86\u6210\u529f\u52a0\u5165\u201cGeneration\u201d\u7684\u65e5\u5fd7\uff0c\u8868\u793a\u5df2\u8fde\u63a5\u5230Kafka Broker\u5e76\u51c6\u5907\u597d\u8bfb\u53d6\u4e8b\u4ef6\u3002<\/p>\n<p>\u8ba9\u6211\u4eec\u5c1d\u8bd5\u4ecekafka-console-producer\u7b49\u751f\u4ea7\u8005\u53d1\u9001\u4e8b\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>kafka-console-producer.sh <span class=\"nt\">--bootstrap-server<\/span> localhost:9092 <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--topic<\/span> purchases <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--property<\/span> <span class=\"s2\">\"parse.key=true\"<\/span> <span class=\"nt\">--property<\/span> <span class=\"s2\">\"key.separator=:\"<\/span>\r\n\r\n<span class=\"o\">&gt;<\/span>alice:apple\r\n<span class=\"o\">&gt;<\/span>bob:banana\r\n<span class=\"o\">&gt;<\/span>cris:orange\r\n<span class=\"o\">&gt;<\/span>^C\r\n<\/code><\/pre>\n<p>\u5728Open Liberty\u5e94\u7528\u7a0b\u5e8f\u4e2d\uff0c\u4e8b\u4ef6\u7684\u503c\u51e0\u4e4e\u5b9e\u65f6\u88ab\u8bb0\u5f55\u8f93\u51fa\u3002<\/p>\n<pre class=\"post-pre\"><code>...\r\n<span class=\"o\">[<\/span>INFO] <span class=\"o\">[<\/span>2022\/11\/06 22:36:06:474 JST] 0000003c com.example.resource.PurchaseResource                        I Consumed item purchase: item name <span class=\"o\">=<\/span> apple\r\n<span class=\"o\">[<\/span>INFO] <span class=\"o\">[<\/span>2022\/11\/06 22:36:08:018 JST] 0000003a com.example.resource.PurchaseResource                        I Consumed item purchase: item name <span class=\"o\">=<\/span> banana\r\n<span class=\"o\">[<\/span>INFO] <span class=\"o\">[<\/span>2022\/11\/06 22:36:10:404 JST] 0000003d com.example.resource.PurchaseResource                        I Consumed item purchase: item name <span class=\"o\">=<\/span> orange\r\n<\/code><\/pre>\n<h2>\u6700\u7ec8\u7cfb\u7edf\u7684\u6784\u6210<\/h2>\n<p>\u5e94\u7528\u7a0b\u5e8f\u7684\u6700\u7ec8\u76ee\u5f55\u7ed3\u6784\u5982\u4e0b\u6240\u793a\uff1a<br \/>\n&#8220;\/path\/to\/project&#8221; \u5c06\u586b\u5199\u4efb\u610f\u9879\u76ee\u7684\u6839\u8def\u5f84\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>tree \/path\/to\/project\r\n\r\n\/path\/to\/project\r\n\u251c\u2500\u2500 pom.xml\r\n\u2514\u2500\u2500 src\r\n    \u2514\u2500\u2500 main\r\n        \u251c\u2500\u2500 java\r\n        \u2502\u00a0\u00a0 \u2514\u2500\u2500 com\r\n        \u2502\u00a0\u00a0     \u2514\u2500\u2500 example\r\n        \u2502\u00a0\u00a0         \u2514\u2500\u2500 resource\r\n        \u2502\u00a0\u00a0             \u2514\u2500\u2500 PurchaseResource.java\r\n        \u251c\u2500\u2500 liberty\r\n        \u2502\u00a0\u00a0 \u2514\u2500\u2500 config\r\n        \u2502\u00a0\u00a0     \u2514\u2500\u2500 server.xml\r\n        \u2514\u2500\u2500 resources\r\n            \u2514\u2500\u2500 META-INF\r\n                \u2514\u2500\u2500 microprofile-config.properties\r\n<\/code><\/pre>\n<h2>\u8bf7\u53c2\u8003<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">OpenLiberty &#8211; Creating reactive Java microservices<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Sending and receiving messages between microservices with MicroProfile Reactive Messaging<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u5728Java\u5e94\u7528\u670d\u52a1\u5668Open Liberty\u4e2d\uff0c\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u79f0\u4e3aMicroProfile Reactive M [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-46828","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u4f7f\u7528Open Liberty\u548cMicroProfile Reactive Messaging\u8bfb\u53d6Kafka\u4e8b\u4ef6 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528open-liberty\u548cmicroprofile-reactive-messaging\u8bfb\u53d6kafka\u4e8b\u4ef6\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Open Liberty\u548cMicroProfile Reactive Messaging\u8bfb\u53d6Kafka\u4e8b\u4ef6\" \/>\n<meta property=\"og:description\" content=\"\u5728Java\u5e94\u7528\u670d\u52a1\u5668Open Liberty\u4e2d\uff0c\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u79f0\u4e3aMicroProfile Reactive M [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528open-liberty\u548cmicroprofile-reactive-messaging\u8bfb\u53d6kafka\u4e8b\u4ef6\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-17T13:09:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-03T16:49:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d7aa3913a08637a696db0\/2-0.png\" \/>\n<meta name=\"author\" content=\"\u5b87, \u534e\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u5b87, \u534e\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8open-liberty%e5%92%8cmicroprofile-reactive-messaging%e8%af%bb%e5%8f%96kafka%e4%ba%8b%e4%bb%b6%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8open-liberty%e5%92%8cmicroprofile-reactive-messaging%e8%af%bb%e5%8f%96kafka%e4%ba%8b%e4%bb%b6%e3%80%82\/\",\"name\":\"\u4f7f\u7528Open Liberty\u548cMicroProfile Reactive Messaging\u8bfb\u53d6Kafka\u4e8b\u4ef6 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2022-12-17T13:09:36+00:00\",\"dateModified\":\"2024-05-03T16:49:55+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8open-liberty%e5%92%8cmicroprofile-reactive-messaging%e8%af%bb%e5%8f%96kafka%e4%ba%8b%e4%bb%b6%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8open-liberty%e5%92%8cmicroprofile-reactive-messaging%e8%af%bb%e5%8f%96kafka%e4%ba%8b%e4%bb%b6%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8open-liberty%e5%92%8cmicroprofile-reactive-messaging%e8%af%bb%e5%8f%96kafka%e4%ba%8b%e4%bb%b6%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Open Liberty\u548cMicroProfile Reactive Messaging\u8bfb\u53d6Kafka\u4e8b\u4ef6\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458\",\"name\":\"\u5b87, \u534e\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g\",\"caption\":\"\u5b87, \u534e\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yuhua\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8open-liberty%e5%92%8cmicroprofile-reactive-messaging%e8%af%bb%e5%8f%96kafka%e4%ba%8b%e4%bb%b6%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Open Liberty\u548cMicroProfile Reactive Messaging\u8bfb\u53d6Kafka\u4e8b\u4ef6 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528open-liberty\u548cmicroprofile-reactive-messaging\u8bfb\u53d6kafka\u4e8b\u4ef6\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Open Liberty\u548cMicroProfile Reactive Messaging\u8bfb\u53d6Kafka\u4e8b\u4ef6","og_description":"\u5728Java\u5e94\u7528\u670d\u52a1\u5668Open Liberty\u4e2d\uff0c\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u79f0\u4e3aMicroProfile Reactive M [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528open-liberty\u548cmicroprofile-reactive-messaging\u8bfb\u53d6kafka\u4e8b\u4ef6\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-12-17T13:09:36+00:00","article_modified_time":"2024-05-03T16:49:55+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d7aa3913a08637a696db0\/2-0.png"}],"author":"\u5b87, \u534e","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u5b87, \u534e","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"3 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8open-liberty%e5%92%8cmicroprofile-reactive-messaging%e8%af%bb%e5%8f%96kafka%e4%ba%8b%e4%bb%b6%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8open-liberty%e5%92%8cmicroprofile-reactive-messaging%e8%af%bb%e5%8f%96kafka%e4%ba%8b%e4%bb%b6%e3%80%82\/","name":"\u4f7f\u7528Open Liberty\u548cMicroProfile Reactive Messaging\u8bfb\u53d6Kafka\u4e8b\u4ef6 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2022-12-17T13:09:36+00:00","dateModified":"2024-05-03T16:49:55+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8open-liberty%e5%92%8cmicroprofile-reactive-messaging%e8%af%bb%e5%8f%96kafka%e4%ba%8b%e4%bb%b6%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8open-liberty%e5%92%8cmicroprofile-reactive-messaging%e8%af%bb%e5%8f%96kafka%e4%ba%8b%e4%bb%b6%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8open-liberty%e5%92%8cmicroprofile-reactive-messaging%e8%af%bb%e5%8f%96kafka%e4%ba%8b%e4%bb%b6%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Open Liberty\u548cMicroProfile Reactive Messaging\u8bfb\u53d6Kafka\u4e8b\u4ef6"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458","name":"\u5b87, \u534e","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g","caption":"\u5b87, \u534e"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yuhua\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8open-liberty%e5%92%8cmicroprofile-reactive-messaging%e8%af%bb%e5%8f%96kafka%e4%ba%8b%e4%bb%b6%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/46828","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=46828"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/46828\/revisions"}],"predecessor-version":[{"id":95115,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/46828\/revisions\/95115"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=46828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=46828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=46828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}