I have a Clojure library that defines the MQHandle
protocol and extends it
(ns example.mq (:import [java.util.concurrent BlockingQueue])) (defprotocol MQHandle (send-message [this key body & params]) (extend-type BlockingQueue MQHandle (send-message [this key body & params] (.put this (merge {::key key, ::body body} (into {} (partition 2 params))))) (defn get-handle ^BlockingQueue [& config] "return a BlockingQueue tied to a thread which consumes messages and submits them to a remote message queue" ...)
... but when I try to use it:
(require '[example.mq :as mq]) (def handle (mq/get-handle config)) (satisfies? mq/MQHandle handle) ; => true (mq/send-message handle "key" "body") ; java.lang.IllegalArgumentException: No single method: send_message of interface: ; com.indeed.clojure_network_repl.mq.MQHandle found for function: send-message of ; protocol: MQHandle
I do not understand the meaning of this exception or what I should do differently.
source share