README.md

# ActiveMQ Client

ActiveMQ client library for Artemis ActiveMQ using STOMP protocol connection.

This library provides a high-level interface for connecting to and interacting with Apache ActiveMQ Artemis using the STOMP protocol. It handles message publishing, consuming, subscription management, and job scheduling/cancellation.

## Features

- **STOMP-based connection** to Artemis ActiveMQ
- **Message publishing and consuming** with automatic reconnection
- **Topic and queue subscription management** with selectors
- **Job scheduling and cancellation** with reply handling
- **Callback-based message processing** for flexible integration
- **Automatic error handling** and connection recovery

## Installation

Add `activemq_client` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:activemq_client, "~> 0.1.0"}
  ]
end
```

## Quick Start

```elixir
# Start the client
{:ok, _} = ActiveMQClient.start_link([
  host: "localhost", 
  port: 61613,
  username: "artemis",
  password: "artemis"
])

# Publish a message
ActiveMQClient.publish_message("Hello World!", "/queue/test")

# Subscribe to a queue
ActiveMQClient.subscribe_to_queue("/queue/test")

# Start listening for job commands
ActiveMQClient.start_listening()
```

## Configuration

The client can be configured with the following options:

- `:host` - ActiveMQ server hostname (default: "localhost")
- `:port` - ActiveMQ STOMP port (default: 61613) 
- `:username` - Authentication username (default: "artemis")
- `:password` - Authentication password (default: "artemis")
- `:queue` - Default queue destination (default: "/queue/artemis_queue")
- `:topic` - Default topic destination (default: "/topic/artemis_topic")
- `:message_handler` - Custom message handler function

## Job Handling

The library supports job scheduling and cancellation through STOMP message selectors:

```elixir
# Start listening for SCHEDULE_JOB_COMMAND and CANCEL_JOB_COMMAND messages
ActiveMQClient.start_listening()
```

Job commands are automatically processed and integrated with the timer system's database and scheduler.

## Dependencies

This library depends only on:
- `stomp_client` - Custom STOMP protocol implementation
- `jason` - JSON encoding/decoding

## Documentation

Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
be found at <https://hexdocs.pm/activemq_client>.

## License

MIT License