diff --git a/src/service/notification.rs b/src/service/notification.rs
index 5054d12be5e4a188767b5c4ee8e36f20071b4a4a..2d910efc6c5337ba45931d079bad82b9c1bc7441 100644
--- a/src/service/notification.rs
+++ b/src/service/notification.rs
@@ -1,11 +1,12 @@
 use std::thread;
 
-use rocket::http::Status;
-use rocket::log;
+use rocket::http::{Accept, Status};
+use rocket::{log, request};
 use rocket::serde::json::to_string;
 use rocket::tokio;
 
 use bambangshop_receiver::{APP_CONFIG, REQWEST_CLIENT, Result, compose_error_response};
+use crate::controller::notification;
 use crate::model::notification::Notification;
 use crate::model::subscriber::SubscriberRequest;
 use crate::repository::notification::NotificationRepository;
@@ -53,4 +54,40 @@ impl NotificationService {
         return thread::spawn(move || Self::subscribe_request(product_type_clone))
             .join().unwrap();
     }
+
+    #[tokio::main]
+    async fn unsubscribe_request(product_type: String) -> Result<SubscriberRequest> {
+        let product_type_upper: String = product_type.to_uppercase();
+        let product_type_str: &str = product_type_upper.as_str();
+        let notification_receiver_url: String = format!("{}/receive",
+            APP_CONFIG.get_instance_root_url());
+        let request_url: String = format!("{}/notification/unsubscribe/{}?url={}",
+            APP_CONFIG.get_publisher_root_url(), product_type_str, notification_receiver_url);
+        let request = REQWEST_CLIENT
+            .post(request_url.clone())
+            .header("Content-Type", "application/json")
+            .header("Accept", "application/json")
+            .send().await;
+        log::warn_!("Sent unsubscribe request to: {}", request_url);
+
+        return match request {
+            Ok(f) => match f.json::<SubscriberRequest>().await {
+                Ok(x) => Ok(x),
+                Err(_y) => Err(compose_error_response(
+                    Status::NotFound,
+                    String::from("Already unsubscribed to the topic.")
+                ))
+            },
+            Err(e) => Err(compose_error_response(
+                Status::NotFound,
+                e.to_string()
+            ))
+        }
+    }
+
+    pub fn unsubscribe(product_type: &str) -> Result<SubscriberRequest> {
+        let product_type_clone = String::from(product_type);
+        return thread::spawn(move || Self::unsubscribe_request(product_type_clone))
+            .join().unwrap();
+    }
 }
\ No newline at end of file