CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-com-rabbitmq--amqp-client

The RabbitMQ Java client library allows Java applications to interface with RabbitMQ message broker servers

Pending
Overview
Eval results
Files

configuration.mddocs/

Configuration

Configuration classes for connection parameters, addressing, authentication, SSL settings, and advanced connection options. These classes provide comprehensive control over how the client connects to and communicates with RabbitMQ brokers.

Capabilities

Address Resolution

Classes for specifying and resolving broker addresses, including support for load balancing and high availability.

/**
 * Represents a broker address with host and port
 */
public class Address {
    /**
     * Create an Address with host and port
     * @param host - Hostname or IP address
     * @param port - Port number
     */
    public Address(String host, int port);
    
    /**
     * Create an Address with host and default port
     * @param host - Hostname or IP address
     */
    public Address(String host);
    
    /**
     * Parse comma-separated list of addresses
     * @param addresses - String like "host1:5672,host2:5672,host3"
     * @return Array of Address objects
     */
    public static Address[] parseAddresses(String addresses) throws IOException;
    
    /**
     * Create single Address from string
     * @param addressString - Format "host:port" or "host"
     * @return Address object
     */
    public static Address valueOf(String addressString);
    
    public String getHost();
    public int getPort();
    
    // Standard constants
    public static final int USE_DEFAULT_PORT = -1;
}

/**
 * Interface for resolving broker addresses dynamically
 */
public interface AddressResolver {
    /**
     * Get list of addresses to connect to
     * @return List of broker addresses
     */
    List<Address> getAddresses() throws IOException;
}

/**
 * Address resolver using a static list of addresses
 */
public class ListAddressResolver implements AddressResolver {
    /**
     * Create resolver with list of addresses
     * @param addresses - List of broker addresses
     */
    public ListAddressResolver(List<Address> addresses);
    
    /**
     * Create resolver from address array
     * @param addresses - Array of broker addresses
     */
    public ListAddressResolver(Address[] addresses);
    
    public List<Address> getAddresses();
}

/**
 * Address resolver using DNS SRV records
 */
public class DnsSrvRecordAddressResolver implements AddressResolver {
    /**
     * Create DNS SRV resolver
     * @param service - Service name (e.g., "amqp") 
     * @param protocol - Protocol (e.g., "tcp")
     * @param domain - Domain name
     */
    public DnsSrvRecordAddressResolver(String service, String protocol, String domain);
    
    /**
     * Create DNS SRV resolver with default AMQP service
     * @param domain - Domain name to query
     */
    public DnsSrvRecordAddressResolver(String domain);
    
    public List<Address> getAddresses() throws IOException;
}

/**
 * Resolves IP addresses from DNS records
 */
public class DnsRecordIpAddressResolver {
    /**
     * Create IP address resolver
     * @param hostname - Hostname to resolve
     * @param port - Port to use for resolved addresses
     */
    public DnsRecordIpAddressResolver(String hostname, int port);
    
    /**
     * Resolve hostname to list of IP addresses
     * @return List of resolved addresses
     */
    public List<Address> getAddresses() throws IOException;
}

Usage Examples:

// Static address configuration
Address[] addresses = Address.parseAddresses("broker1:5672,broker2:5672,broker3:5672");
ConnectionFactory factory = new ConnectionFactory();
Connection connection = factory.newConnection(addresses);
// Using address resolver for high availability
List<Address> brokerList = Arrays.asList(
    new Address("primary.rabbitmq.com", 5672),
    new Address("secondary.rabbitmq.com", 5672),
    new Address("tertiary.rabbitmq.com", 5672)
);

AddressResolver resolver = new ListAddressResolver(brokerList);
ConnectionFactory factory = new ConnectionFactory();
Connection connection = factory.newConnection(resolver);
// DNS-based service discovery
AddressResolver dnsResolver = new DnsSrvRecordAddressResolver("amqp", "tcp", "rabbitmq.example.com");
ConnectionFactory factory = new ConnectionFactory();
Connection connection = factory.newConnection(dnsResolver);

Authentication Configuration

SASL-based authentication configuration for various authentication mechanisms.

/**
 * Interface for SASL authentication configuration
 */
public interface SaslConfig {
    /**
     * Get SASL mechanism for given server mechanisms
     * @param serverMechanisms - Array of server-supported mechanisms
     * @return SaslMechanism to use, or null if none suitable
     */
    SaslMechanism getSaslMechanism(String[] serverMechanisms);
}

/**
 * Interface for SASL authentication mechanisms
 */
public interface SaslMechanism {
    /**
     * Get the name of this SASL mechanism
     * @return Mechanism name (e.g., "PLAIN", "EXTERNAL")
     */
    String getName();
    
    /**
     * Handle authentication challenge from server
     * @param challenge - Challenge data from server
     * @param username - Username for authentication
     * @param password - Password for authentication  
     * @return Response data to send to server
     */
    byte[] handleChallenge(byte[] challenge, String username, String password);
}

/**
 * Default SASL configuration supporting PLAIN and AMQPLAIN
 */
public class DefaultSaslConfig implements SaslConfig {
    /**
     * Create default SASL config
     */
    public DefaultSaslConfig();
    
    public SaslMechanism getSaslMechanism(String[] serverMechanisms);
}

/**
 * JDK-based SASL configuration using Java's SASL framework
 */
public class JDKSaslConfig implements SaslConfig {
    /**
     * Create JDK SASL config
     */
    public JDKSaslConfig();
    
    public SaslMechanism getSaslMechanism(String[] serverMechanisms);
}

Usage Examples:

// Default authentication (PLAIN/AMQPLAIN)
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername("user");
factory.setPassword("password");
factory.setSaslConfig(new DefaultSaslConfig());
// JDK SASL authentication
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername("user");
factory.setPassword("password");
factory.setSaslConfig(new JDKSaslConfig());

SSL/TLS Configuration

Configuration classes for secure connections using SSL/TLS.

/**
 * Interface for creating SSL contexts
 */
public interface SslContextFactory {
    /**
     * Create SSL context for the connection
     * @param sniServerName - Server name for SNI (Server Name Indication)
     * @return Configured SSLContext
     */
    SSLContext create(String sniServerName) throws GeneralSecurityException;
}

/**
 * Interface for configuring SSL engines
 */
public interface SslEngineConfigurator {
    /**
     * Configure an SSL engine
     * @param sslEngine - SSL engine to configure
     */
    void configure(SSLEngine sslEngine) throws SSLException;
}

/**
 * Utility class for SSL engine configurators
 */
public class SslEngineConfigurators {
    /**
     * Get default SSL engine configurator
     * @return Default configurator
     */
    public static SslEngineConfigurator defaultConfigurator();
    
    /**
     * Create SSL engine configurator builder
     * @return Builder for creating custom configurators
     */
    public static SslEngineConfiguratorBuilder builder();
}

/**
 * Trust manager that accepts all certificates (for testing only)
 */
public class TrustEverythingTrustManager implements X509TrustManager {
    public void checkClientTrusted(X509Certificate[] chain, String authType);
    public void checkServerTrusted(X509Certificate[] chain, String authType);
    public X509Certificate[] getAcceptedIssuers();
}

Usage Examples:

// Basic SSL connection
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("secure.rabbitmq.com");
factory.setPort(5671);
factory.useSslProtocol();
Connection connection = factory.newConnection();
// SSL with custom trust store
System.setProperty("javax.net.ssl.trustStore", "/path/to/truststore.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "password");

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("secure.rabbitmq.com");
factory.setPort(5671);
factory.useSslProtocol("TLSv1.2");
// SSL with custom SSL context
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
// ... configure sslContext with key managers, trust managers, etc.

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("secure.rabbitmq.com");
factory.setPort(5671);
factory.useSslProtocol(sslContext);

Socket Configuration

Configuration interfaces for customizing socket behavior and NIO channels.

/**
 * Interface for configuring sockets
 */
public interface SocketConfigurator {
    /**
     * Configure a socket before use
     * @param socket - Socket to configure
     */
    void configure(Socket socket) throws IOException;
}

/**
 * Default socket configurator with standard settings
 */
public class DefaultSocketConfigurator implements SocketConfigurator {
    public void configure(Socket socket) throws IOException;
}

/**
 * Interface for configuring NIO socket channels  
 */
public interface SocketChannelConfigurator {
    /**
     * Configure a socket channel before use
     * @param channel - SocketChannel to configure
     */
    void configure(SocketChannel channel) throws IOException;
}

/**
 * Default socket channel configurator
 */
public class DefaultSocketChannelConfigurator implements SocketChannelConfigurator {
    public void configure(SocketChannel channel) throws IOException;
}

/**
 * Utility class for socket configurators
 */
public class SocketConfigurators {
    /**
     * Get default socket configurator
     * @return Default configurator
     */
    public static SocketConfigurator defaultConfigurator();
    
    /**
     * Create socket configurator builder
     * @return Builder for creating custom configurators
     */
    public static SocketConfiguratorBuilder builder();
}

/**
 * Utility class for socket channel configurators
 */
public class SocketChannelConfigurators {
    /**
     * Get default socket channel configurator
     * @return Default configurator
     */
    public static SocketChannelConfigurator defaultConfigurator();
    
    /**
     * Create socket channel configurator builder
     * @return Builder for creating custom configurators
     */
    public static SocketChannelConfiguratorBuilder builder();
}

Usage Examples:

// Custom socket configuration
SocketConfigurator socketConfig = socket -> {
    socket.setTcpNoDelay(true);
    socket.setSoTimeout(30000);
    socket.setKeepAlive(true);
    socket.setSendBufferSize(64 * 1024);
    socket.setReceiveBufferSize(64 * 1024);
};

ConnectionFactory factory = new ConnectionFactory();
factory.setSocketConfigurator(socketConfig);
// Using socket configurator builder
SocketConfigurator configurator = SocketConfigurators.builder()
    .tcpNoDelay(true)
    .keepAlive(true)
    .sendBufferSize(128 * 1024)
    .receiveBufferSize(128 * 1024)
    .soTimeout(60000)
    .build();

ConnectionFactory factory = new ConnectionFactory();
factory.setSocketConfigurator(configurator);

Connection Factory Configuration Helper

Utility class for configuring ConnectionFactory from properties or environment variables.

/**
 * Utility for configuring ConnectionFactory from external properties
 */
public class ConnectionFactoryConfigurator {
    /**
     * Configure factory from system properties
     * @param connectionFactory - Factory to configure
     * @param prefix - Property prefix (e.g., "rabbitmq.")
     */
    public static void load(ConnectionFactory connectionFactory, String prefix);
    
    /**
     * Configure factory from properties map
     * @param connectionFactory - Factory to configure
     * @param properties - Properties map
     * @param prefix - Property prefix
     */
    public static void load(ConnectionFactory connectionFactory, Map<String, String> properties, String prefix);
    
    /**
     * Configure factory from Properties object
     * @param connectionFactory - Factory to configure
     * @param properties - Properties object
     * @param prefix - Property prefix
     */
    public static void load(ConnectionFactory connectionFactory, Properties properties, String prefix);
}

Usage Examples:

// Configure from system properties
// Set system properties: -Drabbitmq.host=localhost -Drabbitmq.port=5672
ConnectionFactory factory = new ConnectionFactory();
ConnectionFactoryConfigurator.load(factory, "rabbitmq.");
// Configure from properties file
Properties props = new Properties();
props.load(new FileInputStream("rabbitmq.properties"));

ConnectionFactory factory = new ConnectionFactory();
ConnectionFactoryConfigurator.load(factory, props, "");
// Configure from environment-like map
Map<String, String> config = Map.of(
    "rabbitmq.host", "broker.example.com",
    "rabbitmq.port", "5672",
    "rabbitmq.username", "myuser",
    "rabbitmq.password", "mypass",
    "rabbitmq.virtualHost", "/prod"
);

ConnectionFactory factory = new ConnectionFactory();
ConnectionFactoryConfigurator.load(factory, config, "rabbitmq.");

Types

Configuration-Related Types

// Resolved internet address wrapper
public class ResolvedInetAddress {
    public InetAddress getAddress();
    public String getHostname();
}

// Address information
public class Address {
    public String getHost();
    public int getPort();
    public boolean equals(Object obj);
    public int hashCode();
    public String toString();
}

Configuration Examples

Complete Connection Setup:

public ConnectionFactory createProductionConnectionFactory() {
    ConnectionFactory factory = new ConnectionFactory();
    
    // Basic connection settings
    factory.setHost("rabbitmq.prod.example.com");
    factory.setPort(5671); // SSL port
    factory.setUsername("prod-user");
    factory.setPassword("secure-password");
    factory.setVirtualHost("/production");
    
    // SSL configuration
    factory.useSslProtocol("TLSv1.2");
    
    // Timeouts and limits
    factory.setConnectionTimeout(30000);
    factory.setHandshakeTimeout(10000);
    factory.setRequestedHeartbeat(30);
    factory.setRequestedChannelMax(100);
    
    // Recovery settings
    factory.setAutomaticRecoveryEnabled(true);
    factory.setNetworkRecoveryInterval(5000);
    
    // Socket configuration
    SocketConfigurator socketConfig = socket -> {
        socket.setTcpNoDelay(true);
        socket.setKeepAlive(true);
        socket.setSendBufferSize(128 * 1024);
        socket.setReceiveBufferSize(128 * 1024);
    };
    factory.setSocketConfigurator(socketConfig);
    
    return factory;
}

High Availability Setup:

public Connection createHAConnection() throws IOException, TimeoutException {
    // Multiple broker addresses for failover
    Address[] addresses = {
        new Address("rabbitmq1.example.com", 5672),
        new Address("rabbitmq2.example.com", 5672),
        new Address("rabbitmq3.example.com", 5672)
    };
    
    ConnectionFactory factory = new ConnectionFactory();
    factory.setUsername("ha-user");
    factory.setPassword("ha-password");
    factory.setAutomaticRecoveryEnabled(true);
    factory.setNetworkRecoveryInterval(2000);
    
    // Connection will try addresses in order until one succeeds
    return factory.newConnection(addresses);
}

Install with Tessl CLI

npx tessl i tessl/maven-com-rabbitmq--amqp-client

docs

configuration.md

confirms-returns.md

connection-channel.md

consumer-api.md

consuming.md

error-recovery.md

index.md

observability.md

publishing.md

rpc.md

tile.json