diff --git a/oslo_messaging/rpc/server.py b/oslo_messaging/rpc/server.py
index a9f71ce75..eb8d2c9e2 100644
--- a/oslo_messaging/rpc/server.py
+++ b/oslo_messaging/rpc/server.py
@@ -50,7 +50,8 @@ dispatched. Refer to the Executor documentation for descriptions of the types
 of executors.
 
 *Note:* If the "eventlet" executor is used, the threading and time library need
-to be monkeypatched.
+to be monkeypatched. The Eventlet executor is deprecated and the threading
+executor will be the only available executor.
 
 The RPC reply operation is best-effort: the server will consider the message
 containing the reply successfully sent once it is accepted by the messaging
@@ -124,6 +125,7 @@ import logging
 import sys
 import time
 
+import debtcollector
 from oslo_messaging import exceptions
 from oslo_messaging.rpc import dispatcher as rpc_dispatcher
 from oslo_messaging import server as msg_server
@@ -217,6 +219,10 @@ class RPCServer(msg_server.MessageHandlingServer):
             del failure
 
 
+@debtcollector.removals.removed_kwarg(
+    'executor',
+    message="the eventlet executor is now deprecated. Threading "
+            "will be the only execution model available.")
 def get_rpc_server(transport, target, endpoints,
                    executor=None, serializer=None, access_policy=None,
                    server_cls=RPCServer):
@@ -228,8 +234,9 @@ def get_rpc_server(transport, target, endpoints,
     :type target: Target
     :param endpoints: a list of endpoint objects
     :type endpoints: list
-    :param executor: name of message executor - available values are
-                     'eventlet' and 'threading'
+    :param executor: (DEPRECATED) name of message executor -
+        available values are 'eventlet' and 'threading'.
+        The Eventlet executor is also deprecated.
     :type executor: str
     :param serializer: an optional entity serializer
     :type serializer: Serializer
diff --git a/oslo_messaging/server.py b/oslo_messaging/server.py
index 3eb33a2ef..b91de0a83 100644
--- a/oslo_messaging/server.py
+++ b/oslo_messaging/server.py
@@ -23,6 +23,7 @@ import logging
 import threading
 import traceback
 
+import debtcollector
 from oslo_config import cfg
 from oslo_service import service
 from oslo_utils import eventletutils
@@ -305,6 +306,10 @@ class MessageHandlingServer(service.ServiceBase, _OrderedTaskRunner,
     new tasks.
     """
 
+    @debtcollector.removals.removed_kwarg(
+        'executor',
+        message="the eventlet executor is now deprecated. Threading "
+                "will be the only execution model available.")
     def __init__(self, transport, dispatcher, executor=None):
         """Construct a message handling server.
 
@@ -322,8 +327,9 @@ class MessageHandlingServer(service.ServiceBase, _OrderedTaskRunner,
         :param dispatcher: has a dispatch() method which is invoked for each
                            incoming request
         :type dispatcher: DispatcherBase
-        :param executor: name of message executor - available values are
-                         'eventlet' and 'threading'
+        :param executor: (DEPRECATED) name of message executor -
+            available values are 'eventlet' and 'threading'.
+            The Eventlet executor is also deprecated.
         :type executor: str
         """
         if executor and executor not in ("threading", "eventlet"):
@@ -339,11 +345,23 @@ class MessageHandlingServer(service.ServiceBase, _OrderedTaskRunner,
         self.transport = transport
         self.dispatcher = dispatcher
         self.executor_type = executor
+
         if self.executor_type == "eventlet":
             eventletutils.warn_eventlet_not_patched(
                 expected_patched_modules=['thread'],
                 what="the 'oslo.messaging eventlet executor'")
 
+            debtcollector.deprecate(
+                'Eventlet usages are deprecated and the removal '
+                'of Eventlet from OpenStack is planned, for this reason '
+                'the Eventlet executor is deprecated. '
+                'Start migrating your stack to the '
+                'threading executor. Please also start considering '
+                'removing your internal Eventlet usages.',
+                version="2025.1", removal_version="2026.1",
+                category=DeprecationWarning
+            )
+
         self.listener = None
 
         try:
diff --git a/oslo_messaging/tests/rpc/test_server.py b/oslo_messaging/tests/rpc/test_server.py
index bc5ff7f85..bbf14834a 100644
--- a/oslo_messaging/tests/rpc/test_server.py
+++ b/oslo_messaging/tests/rpc/test_server.py
@@ -15,6 +15,7 @@
 
 import threading
 from unittest import mock
+import warnings
 
 
 import eventlet
@@ -140,13 +141,15 @@ class TestRPCServer(test_utils.BaseTestCase, ServerSetupMixin):
         self.assertIs(server.dispatcher.serializer, serializer)
         self.assertEqual('threading', server.executor_type)
 
-    def test_constructor_with_eventlet_executor(self):
+    @mock.patch('warnings.warn')
+    def test_constructor_with_eventlet_executor(self, warn):
         transport = oslo_messaging.get_rpc_transport(self.conf, url='fake:')
         target = oslo_messaging.Target(topic='foo', server='bar')
         endpoints = [object()]
         serializer = object()
         access_policy = dispatcher.DefaultRPCAccessPolicy
 
+        warnings.simplefilter("always", DeprecationWarning)
         server = oslo_messaging.get_rpc_server(transport,
                                                target,
                                                endpoints,
@@ -159,6 +162,22 @@ class TestRPCServer(test_utils.BaseTestCase, ServerSetupMixin):
         self.assertIs(server.dispatcher.endpoints, endpoints)
         self.assertIs(server.dispatcher.serializer, serializer)
         self.assertEqual('eventlet', server.executor_type)
+        self.assertEqual([
+            mock.call(
+                "Using the 'executor' argument is deprecated: "
+                "the eventlet executor is now deprecated. "
+                "Threading will be the only execution model available.",
+                category=DeprecationWarning, stacklevel=3),
+            mock.call(
+                "Eventlet usages are deprecated and the removal "
+                "of Eventlet from OpenStack is planned, for this "
+                "reason the Eventlet executor is deprecated. "
+                "Start migrating your stack to the threading executor. "
+                "Please also start considering removing your internal "
+                "Eventlet usages. in version '2025.1' and will be "
+                "removed in version '2026.1'",
+                category=DeprecationWarning, stacklevel=3)
+        ], warn.mock_calls)
 
     def test_constructor_with_unrecognized_executor(self):
         transport = oslo_messaging.get_rpc_transport(self.conf, url='fake:')
diff --git a/releasenotes/notes/deprecate-eventlet-executor-13835b9818fd77f2.yaml b/releasenotes/notes/deprecate-eventlet-executor-13835b9818fd77f2.yaml
new file mode 100644
index 000000000..128818115
--- /dev/null
+++ b/releasenotes/notes/deprecate-eventlet-executor-13835b9818fd77f2.yaml
@@ -0,0 +1,12 @@
+---
+deprecations:
+  - |
+    Eventlet usages are deprecated and the removal of Eventlet from
+    OpenStack `is planned <https://governance.openstack.org/tc//goals/proposed/remove-eventlet.html>`_, for this reason the Eventlet executor is
+    deprecated. Start migrating your stack to the threading executor.
+    Please also start considering removing your internal Eventlet usages.
+  - |
+    The `executor` parameter of the `MessageHandlingServer` class is now
+    deprecated and planned for removal. The Eventlet executor is deprecated.
+    Only the threading executor will remains available so the `executor`
+    parameter is useless.