This is an automated email from the ASF dual-hosted git repository.

mxsm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/eventmesh.git


The following commit(s) were added to refs/heads/master by this push:
     new 707c98da9 [ISSUE #4390] Realize the SPI extension loading of RabbitMQ 
admin-api (#4395)
707c98da9 is described below

commit 707c98da994324dea39d1e6c0d631fd0b7d78211
Author: Pil0tXia <[email protected]>
AuthorDate: Sat Aug 26 19:25:46 2023 +0800

    [ISSUE #4390] Realize the SPI extension loading of RabbitMQ admin-api 
(#4395)
    
    * config: rabbitmq spi without webhook, RESTORE BEFORE MERGE
    
    * config: add extensionType in META-INF
    
    * fix: resolve extension not found error when startup
    
    * feat: add rabbitmq management config
    
    * feat: provide limited admin func
    
    * Revert "config: rabbitmq spi without webhook, RESTORE BEFORE MERGE"
    
    This reverts commit a835cbf4351408f6e176c31ae570b37e6612bc07.
    
    * doc: add PR link to README
---
 .../eventmesh-storage-rabbitmq/src/README.md       | 26 +++++++
 .../storage/rabbitmq/admin/RabbitMQAdmin.java      | 72 ++++++++++++++++++
 .../rabbitmq/admin/RabbitMQAdminAdaptor.java       | 85 ++++++++++++++++++++++
 .../rabbitmq/config/ConfigurationHolder.java       |  6 ++
 .../org.apache.eventmesh.api.admin.Admin}          | 17 +----
 .../src/main/resources/rabbitmq-client.properties  | 23 +++---
 6 files changed, 204 insertions(+), 25 deletions(-)

diff --git a/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/README.md 
b/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/README.md
new file mode 100644
index 000000000..fe90c2163
--- /dev/null
+++ b/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/README.md
@@ -0,0 +1,26 @@
+## Dashboard
+
+To enable eventmesh-dashboard admin UI for RabbitMQ, you need to add plugin 
rabbitmq_management.
+
+```bash
+rabbitmq-plugins enable rabbitmq_management
+```
+
+## RabbitMQ Management
+
+The RabbitMQ management UI can be accessed using a Web browser at 
`http://{node-hostname}:15672/`.
+
+Users must be [granted 
permissions](https://www.rabbitmq.com/management.html#permissions) for 
management UI access.
+
+The following example creates a user with complete access to the management 
UI/HTTP API (as in, all virtual hosts and management features):
+
+```bash
+# create a user
+rabbitmqctl add_user full_access s3crEt
+# tag the user with "administrator" for full management UI and HTTP API access
+rabbitmqctl set_user_tags full_access administrator
+```
+
+eventmesh-dashboard does not support authenticating with OAuth 2 currently. If 
you are using OAuth 2 to authenticate, you should keep 
`management.disable_basic_auth` configuration at default value `false` to 
support HTTP basic authentication.
+
+> More information for developers to provide admin functions: 
https://github.com/apache/eventmesh/pull/4395
diff --git 
a/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/java/org/apache/eventmesh/storage/rabbitmq/admin/RabbitMQAdmin.java
 
b/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/java/org/apache/eventmesh/storage/rabbitmq/admin/RabbitMQAdmin.java
new file mode 100644
index 000000000..902853bed
--- /dev/null
+++ 
b/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/java/org/apache/eventmesh/storage/rabbitmq/admin/RabbitMQAdmin.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.eventmesh.storage.rabbitmq.admin;
+
+import org.apache.eventmesh.api.admin.AbstractAdmin;
+import org.apache.eventmesh.api.admin.TopicProperties;
+import org.apache.eventmesh.storage.rabbitmq.config.ConfigurationHolder;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import io.cloudevents.CloudEvent;
+
+public class RabbitMQAdmin extends AbstractAdmin {
+
+    private ConfigurationHolder configurationHolder;
+
+    private String mgmtHost;
+
+    private int mgmtPort;
+
+    private String mgmtProtocol;
+
+    public RabbitMQAdmin() {
+        super(new AtomicBoolean(false));
+    }
+
+    public void init() throws Exception {
+        this.mgmtHost = configurationHolder.getHost();
+        this.mgmtPort = configurationHolder.getMgmtPort();
+        this.mgmtProtocol = configurationHolder.getMgmtProtocol();
+    }
+
+    @Override
+    public List<TopicProperties> getTopic() {
+        // Utilizing the RabbitMQ Management HTTP API is a favorable approach 
to list queues and historical message counts.
+        // To display topics, it would be necessary to retrieve the topic name 
from each message and use it to declare a corresponding queue.
+        return new ArrayList<>();
+    }
+
+    @Override
+    public void createTopic(String topicName) {
+    }
+
+    @Override
+    public void deleteTopic(String topicName) {
+    }
+
+    @Override
+    public void publish(CloudEvent cloudEvent) throws Exception {
+    }
+
+    @Override
+    public void shutdown() {
+    }
+}
diff --git 
a/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/java/org/apache/eventmesh/storage/rabbitmq/admin/RabbitMQAdminAdaptor.java
 
b/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/java/org/apache/eventmesh/storage/rabbitmq/admin/RabbitMQAdminAdaptor.java
new file mode 100644
index 000000000..e2792f951
--- /dev/null
+++ 
b/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/java/org/apache/eventmesh/storage/rabbitmq/admin/RabbitMQAdminAdaptor.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.eventmesh.storage.rabbitmq.admin;
+
+import org.apache.eventmesh.api.admin.Admin;
+import org.apache.eventmesh.api.admin.TopicProperties;
+
+import java.util.List;
+import java.util.Properties;
+
+import io.cloudevents.CloudEvent;
+
+public class RabbitMQAdminAdaptor implements Admin {
+
+    private final RabbitMQAdmin admin;
+
+    public RabbitMQAdminAdaptor() {
+        admin = new RabbitMQAdmin();
+    }
+
+    @Override
+    public boolean isStarted() {
+        return admin.isStarted();
+    }
+
+    @Override
+    public boolean isClosed() {
+        return admin.isClosed();
+    }
+
+    @Override
+    public void start() {
+        admin.start();
+    }
+
+    @Override
+    public void shutdown() {
+        admin.shutdown();
+    }
+
+    @Override
+    public void init(Properties properties) throws Exception {
+        admin.init(properties);
+    }
+
+    @Override
+    public List<TopicProperties> getTopic() throws Exception {
+        return admin.getTopic();
+    }
+
+    @Override
+    public void createTopic(String topicName) {
+        admin.createTopic(topicName);
+    }
+
+    @Override
+    public void deleteTopic(String topicName) {
+        admin.deleteTopic(topicName);
+    }
+
+    @Override
+    public List<CloudEvent> getEvent(String topicName, int offset, int length) 
throws Exception {
+        return admin.getEvent(topicName, offset, length);
+    }
+
+    @Override
+    public void publish(CloudEvent cloudEvent) throws Exception {
+        admin.publish(cloudEvent);
+    }
+}
diff --git 
a/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/java/org/apache/eventmesh/storage/rabbitmq/config/ConfigurationHolder.java
 
b/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/java/org/apache/eventmesh/storage/rabbitmq/config/ConfigurationHolder.java
index 13ec86b32..1bd1f6dc1 100644
--- 
a/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/java/org/apache/eventmesh/storage/rabbitmq/config/ConfigurationHolder.java
+++ 
b/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/java/org/apache/eventmesh/storage/rabbitmq/config/ConfigurationHolder.java
@@ -57,4 +57,10 @@ public class ConfigurationHolder {
 
     @ConfigFiled(field = "autoAck")
     private boolean autoAck;
+
+    @ConfigFiled(field = "mgmt.port")
+    private int mgmtPort;
+
+    @ConfigFiled(field = "mgmt.protocol")
+    private String mgmtProtocol;
 }
diff --git 
a/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/resources/rabbitmq-client.properties
 
b/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/resources/META-INF/eventmesh/org.apache.eventmesh.api.admin.Admin
similarity index 59%
copy from 
eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/resources/rabbitmq-client.properties
copy to 
eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/resources/META-INF/eventmesh/org.apache.eventmesh.api.admin.Admin
index db9f3a5fa..3d2bdc811 100644
--- 
a/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/resources/rabbitmq-client.properties
+++ 
b/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/resources/META-INF/eventmesh/org.apache.eventmesh.api.admin.Admin
@@ -1,4 +1,3 @@
-#
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
@@ -13,19 +12,5 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-#
-
-####################### rabbitmq server ##################
-eventMesh.server.rabbitmq.host=
-eventMesh.server.rabbitmq.port=
-eventMesh.server.rabbitmq.username=
-eventMesh.server.rabbitmq.passwd=
-eventMesh.server.rabbitmq.virtualHost=
 
-####################### rabbitmq queue setting ##################
-# DIRECT, FANOUT, TOPIC, HEADERS
-eventMesh.server.rabbitmq.exchangeType=TOPIC
-eventMesh.server.rabbitmq.exchangeName=
-eventMesh.server.rabbitmq.routingKey=
-eventMesh.server.rabbitmq.queueName=
-eventMesh.server.rabbitmq.autoAck=true
\ No newline at end of file
+rabbitmq=org.apache.eventmesh.storage.rabbitmq.admin.RabbitMQAdminAdaptor
\ No newline at end of file
diff --git 
a/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/resources/rabbitmq-client.properties
 
b/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/resources/rabbitmq-client.properties
index db9f3a5fa..0a282dff4 100644
--- 
a/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/resources/rabbitmq-client.properties
+++ 
b/eventmesh-storage-plugin/eventmesh-storage-rabbitmq/src/main/resources/rabbitmq-client.properties
@@ -16,16 +16,21 @@
 #
 
 ####################### rabbitmq server ##################
-eventMesh.server.rabbitmq.host=
-eventMesh.server.rabbitmq.port=
-eventMesh.server.rabbitmq.username=
-eventMesh.server.rabbitmq.passwd=
-eventMesh.server.rabbitmq.virtualHost=
+eventMesh.server.rabbitmq.host=127.0.0.1
+eventMesh.server.rabbitmq.port=5672
+eventMesh.server.rabbitmq.username=guest
+eventMesh.server.rabbitmq.passwd=guest
+eventMesh.server.rabbitmq.virtualHost=/
 
 ####################### rabbitmq queue setting ##################
 # DIRECT, FANOUT, TOPIC, HEADERS
 eventMesh.server.rabbitmq.exchangeType=TOPIC
-eventMesh.server.rabbitmq.exchangeName=
-eventMesh.server.rabbitmq.routingKey=
-eventMesh.server.rabbitmq.queueName=
-eventMesh.server.rabbitmq.autoAck=true
\ No newline at end of file
+eventMesh.server.rabbitmq.exchangeName=eventmesh.default
+eventMesh.server.rabbitmq.routingKey=#
+eventMesh.server.rabbitmq.queueName=DefaultQueue
+eventMesh.server.rabbitmq.autoAck=true
+
+####################### rabbitmq management ##################
+eventMesh.server.rabbitmq.mgmt.port=15672
+# HTTP, HTTPS
+eventMesh.server.rabbitmq.mgmt.protocol=HTTP
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to