在RabbitMQ
音讯队列应用@RabbitListener
接管音讯,队列名称应用常量命名,然而如果应用动静队列名称,比方依据零碎ip
命名队列名称。
获取服务器 IP
/** * 获取服务器ip,解决linux获取ip为127.0.0.1bug * @return */ public static String getServerIp() throws SocketException { String ip = ""; for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface anInterface = en.nextElement(); String name = anInterface.getName(); if (!name.contains("docker") && !name.contains("lo")) { for (Enumeration<InetAddress> enumIpAddr = anInterface.getInetAddresses(); enumIpAddr.hasMoreElements();) { //取得IP InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { String ipaddress = inetAddress.getHostAddress().toString(); if (!ipaddress.contains("::") && !ipaddress.contains("0:0:") && !ipaddress.contains("fe80")) { if(!"127.0.0.1".equals(ip)){ return ipaddress; } } } } } } return ip; }
创立队列
private String IP_ADDRESS = getServerIp();@RabbitListener(queues = IP_ADDRESS) public void listener(String message) { System.out.println(message); }
编译报错 Attribute value must be constant
解决方案
创立队列
private String IP_ADDRESS = getServerIp(); @Bean public Queue queue() { return new Queue(IP_ADDRESS); }
应用
#{}
援用bean
名称@RabbitListener(queues= "#{queue.name}") public void listener(String message) { System.out.println(message); }
#{queue.name}
其中queue
是bean
名称,name
是固定。